Внешняя структура?

Я использую 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 где-нибудь, он, вероятно, не будет компилироваться полностью, когда он достигнет компоновщика.