Я компилирую это, используя g ++ и make-файл.Версия 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.» Я хотел бы внести как можно меньше изменений вTон существующий код.Я не программист на Си, поэтому здесь у меня ограниченное понимание.Я знаю, что эти функции используются с simulink, и все компилируется внутри компилятора Matlab.Мы пытаемся экспортировать созданное simulink, чтобы мы могли интегрировать его в другую программу, но это одна из многих проблем, с которыми мы сталкиваемся при компиляции.Надеюсь, это даст лучшую справочную информацию