Как установить переменную-член вне класса и использовать эту переменную внутри класса в C ++?

Я довольно плохо знаком с cocos2dx и c ++. У меня проблемы с передачей данных между классами.

Вот моя проблема

У меня есть class1, в котором мне нужно установить значение переменной и вызвать функцию другого класса, скажем, «Class2».

Мне нужно сделать это в class1 без создания объекта class2.

То, что я сделал до сих пор, похоже на следующее.

Class1.cpp

#include "class2.h"void Class1::methodinClassOne()
{
class2::imageName = this->str;
class2::doSth();
}

class2.h

class class2 {

public:
std::string imageName;
static void doSth();
};

class2.mm

#include "class2.h"using namespace cocos2d;

void class2::doSth() {

id sth = [[UIApplication sharedApplication] delegate];

if ([sth isKindOfClass:[AppController class]])
{

printf("class2::doSth imageName %s",imageName.c_str());

SpriteVC *SPVC = [[SpriteVC alloc] initWithNibName:nil bundle:nil];

SPVC.imageNameString = [NSString stringWithFormat:@"%s",imageName.c_str()];

NSLog(@"class2::doSth imageName == %@",[NSString stringWithFormat:@"%s",imageName.c_str()]);

SPVC.imageView.frame = CGRectMake(480, 320, 333, 333);

AppController *controller = (AppController *)sth;

[controller.viewController.view addSubview:SPVC.imageView];
}
}

Ошибка похожа на следующее

введите описание изображения здесь

внутри class2.h
Я также пытался использовать

static std::string imageName;

вместо

std::string imageName;

Но тогда это дает мне следующую ошибку

Undefined symbols for architecture i386:"class2::imageName", referenced from:class2::doSth() in XBridge.o

Я знаю, что здесь отсутствует базовая концепция C ++. но, похоже, не смог найти в чем дело.
Пожалуйста, помогите мне здесь.
Спасибо

0

Решение

В дополнение к их объявлению, статические переменные-члены должны быть определены вне тела класса.
Итак, сначала вы должны объявить переменную-член imageName как статический в class2 заголовочный файл, а затем вы также должны определить переменную в соответствующем файле mm:

class2.h

class class2 {

public:
static std::string imageName;
static void doSth();
};

class2.mm

#include "class2.h"std::string class2::imageName;

//other stuff
1

Другие решения


По вопросам рекламы [email protected]