Я довольно плохо знаком с 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 ++. но, похоже, не смог найти в чем дело.
Пожалуйста, помогите мне здесь.
Спасибо
В дополнение к их объявлению, статические переменные-члены должны быть определены вне тела класса.
Итак, сначала вы должны объявить переменную-член 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