【发布时间】:2011-10-16 20:21:50
【问题描述】:
我正在使用 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 文件包含“必须使用 C 函数语法的 Simulink 定义的函数”。我想对现有代码进行尽可能少的更改。我不是 C 程序员,所以在这里我的理解有限。我确实知道这些函数正在与 simulink 一起使用,并且所有内容都在 matlab 编译器中编译。我们正在尝试导出 simulink 创建的内容,以便我们可以将其集成到另一个程序中,但这是我们编译的众多问题之一。希望这能提供一些更好的背景信息
【问题讨论】:
-
你为什么要首先尝试给 C 类链接..?
-
从其派生的原始 cpp 文件包含“必须使用 C 函数语法的 Simulink 定义的函数”。我想对现有代码进行尽可能少的更改。我不是 C 程序员,所以在这里我的理解有限。我确实知道这些函数正在与 simulink 一起使用,并且所有内容都在 matlab 编译器中编译。我们正在尝试导出 simulink 创建的内容,以便我们可以将其集成到另一个程序中,但这是我们编译的众多问题之一。希望这能提供一些更好的背景信息。
-
这不是一个重复的问题——
extern "C"链接的问题是新的。投票重新开放。
标签: c++ static reference g++ undefined