我编译这个使用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”我得到这个错误:‘在功能MyClass的::实例()’:MyClass.cpp:“未定义参考MyClass的::日志
如果我编译“克++ MyClass.cpp -c”它建立对象文件,但链接该文件链接期间导致相同的错误。 我试图定义与静态变量“MyClass的MyClass的::登录;” 类定义后,但因为它是编译在C,我不认为这会工作。 它给出了一个错误消息“C ++链接冲突的新的定义与C链接”
我不知道如何解决这个问题,我一直在敲我的头这几天了。 任何帮助是极大的赞赏。
额外的背景信息:
这源自原始CPP文件包含“Simulink的定义的函数,其必须使用C-函数语法”。 我想作出一些改变,尽可能现有的代码。 我不是一个C程序员,所以我理解这里的限制。 我知道,这些职能正在使用Simulink使用一切MATLAB的编译器编译里面。 我们正在尝试导出什么SIMULINK创建,这样我们就可以在另一个程序将其集成,但这是我们编译的诸多问题之一。 希望这提供了一些更好的背景资料