本地创建的对象的 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 未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

从 gcc 3.3.3 到 4.1.0 的移植,C++ 模板,未定义的引用

奇怪的错误 - 链接到自己的库gcc时未定义的引用

链接器错误 - 未定义的引用 -gcc

强制 GCC 通知共享库中未定义的引用

gcc编译时对’xxxx’未定义的引用问题

带有 abi:cxx11 的 GCC 未定义引用