Внешняя структура?
Я использую extern для извлечения переменных из другого класса, и он отлично работает для int, float и т.д.
Но это не работает, и я не знаю, как это сделать:
Class1.cpp
struct MyStruct {
int x;
}
MyStruct theVar;
Class2.cpp
extern MyStruct theVar;
void test() {
int t = theVar.x;
}
Это не работает, потому что Class2 не знает, что такое MyStruct.
Как это исправить?:/
Я попытался объявить ту же структуру в Class2.cpp и скомпилировал ее, но значения были неправильными.
Ответы
Ответ 1
Вы помещаете объявление типа struct MyStruct
в файл .h
и включаете его как в class1.cpp, так и в class2.cpp.
IOW:
Myst.h
struct MyStruct {
int x;
};
Class1.cpp
#include "Myst.h"
MyStruct theVar;
Class2.cpp
#include "Myst.h"
extern struct MyStruct theVar;
void test() {
int t = theVar.x;
}
Ответ 2
Сначала вы должны определить свою структуру в классе или общем заголовочном файле. Обязательно включите это начальное определение с помощью #include "Class1.h"
, например.
Затем вам нужно изменить свое утверждение, чтобы сказать extern struct MyStruct theVar;
Этот оператор не обязательно должен находиться в файле заголовка. Он может быть глобальным.
Изменить: в файле .CPP должно быть указано оригинальное объявление. Все extern
это означает, что компилятор/компоновщик доверяет вам, что он существует где-то еще, и когда программа построена, она найдет правильное определение. Если вы не определите struct MyStruct theVar
где-нибудь, он, вероятно, не будет компилироваться полностью, когда он достигнет компоновщика.