本地创建的对象的 gcc 未定义引用
Posted
技术标签:
【中文标题】本地创建的对象的 gcc 未定义引用【英文标题】:gcc undefined reference with local created Objects 【发布时间】:2015-02-08 11:07:21 【问题描述】:我是 C++ 新手,我在 Windows 下使用 GCC 编译,当我创建任何本地对象时,编译器会发出错误消息“未定义的本地引用” 我想像下面的代码一样创建工厂函数 错误消息:“未定义对 `Widget::Widget()' 的引用”
class Widget
public:
Widget();
virtual ~Widget();
int data() return data_;
void setData(int val) data_ = val;
protected:
private:
int data_;
;
Widget* createWidget()
Widget* w = new Widget();
return w;
int callSomething(Widget* widget,Signal* sig,int x)
return 0;
int main()
callSomething(createWidget(),createSignal(),4);
【问题讨论】:
createSignal()
是在哪里定义的?
请包含实际的错误信息。
发布完整的错误消息及其引用的实际代码。
错误信息:未定义引用`Widget::Widget()'|
嗯,好的,Widget 构造函数在哪里?
【参考方案1】:
undefined reference to x
告诉您您尚未定义函数 x
但您正在尝试调用它。而且编译器是对的:
你还没有定义你的 Widget
构造函数。
如果您只需要一个空的构造函数,请将Widget();
替换为Widget()
,或者如果您不需要用户定义的构造函数,则删除Widget();
。
【讨论】:
谢谢@zenith,但这只是构造函数在cpp文件中实现的完整代码的一部分【参考方案2】:[已解决]我真的用GCC编译器,CodeBlocks,问题来自环境,当我关闭编辑器然后打开同一个项目然后编译它编译成功,我不知道发生了什么, 感谢每一个人
【讨论】:
以上是关于本地创建的对象的 gcc 未定义引用的主要内容,如果未能解决你的问题,请参考以下文章