Я компилирую это, используя g++ и makefile. Версия g++ — 4.1.2 20080704.
Вот упрощенный код, который все еще содержит ошибку:
#ifdef __cplusplus
extern "C"
{
#endif
class MyClass
{
public:
MyClass() {};
MyClass& operator=(MyClass&);
static MyClass& instance() { return log; };
private:
static MyClass log;
};
//MyClass MyClass::log;
int main()
{
MyClass& myClass = MyClass::instance();
return 0;
}
#ifdef __cplusplus
} //extern "C"
#endif
Когда я компилирую с "g++ MyClass.cpp", я получаю эту ошибку: "In Function MyClass::Instance()": MyClass.cpp: "Неопределенная ссылка на MyClass::log
Если я компилирую с помощью «g++ MyClass.cpp -c», он создает объектный файл, но связывание этого файла вызывает ту же ошибку во время связывания. Я попытался определить статическую переменную с помощью "MyClass MyClass::log;" после определения класса, но поскольку он компилируется на C, я не думаю, что это сработает. Он выдает сообщение об ошибке «Связь C++ конфликтует с новым определением с помощью связи C».
Я не уверен, как это решить, я уже несколько дней бьюсь об это головой. Любая помощь приветствуется.
Дополнительная справочная информация:
Исходный файл cpp, из которого он получен, содержит «функции, определенные Simulink, которые должны использовать синтаксис C-функции». Я хотел бы внести как можно меньше изменений в существующий код. Я не программист на C, поэтому у меня есть ограниченное понимание здесь. Я знаю, что эти функции используются с simulink, и все компилируется внутри компилятора Matlab. Мы пытаемся экспортировать то, что создано Simulink, чтобы мы могли интегрировать его в другую программу, но это одна из многих проблем, с которыми мы столкнулись при компиляции. Надеюсь, это даст лучшую справочную информацию
extern "C"
связью является новой. Голосование за открытие. - person TonyK   schedule 17.10.2011