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

0

Я довольно много нового для 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];
}
}

Ошибка выглядит следующим образом

Изображение 174551

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

static std::string imageName;

вместо

std::string imageName;

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

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

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

Теги:
cocos2d-x
ios7

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню