Я довольно много нового для cocos2dx и c++. У меня возникают проблемы с передачей данных между классами.
Вот моя проблема
У меня есть класс1, в котором мне нужно установить значение переменной и вызвать функцию другого класса, пусть сказать "Class2".
Мне нужно сделать это в классе1 без создания объекта класса2.
То, что я сделал до сих пор, выглядит следующим образом.
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