【问题标题】:gcc undefined reference with local created Objects本地创建的对象的 gcc 未定义引用
【发布时间】: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 构造函数在哪里?

标签: c++ windows gcc


【解决方案1】:

undefined reference to x 告诉您您尚未定义函数 x 但您正在尝试调用它。而且编译器是对的:

你还没有定义你的 Widget 构造函数。

如果您只需要一个空的构造函数,请将Widget(); 替换为Widget() {},或者如果您不需要用户定义的构造函数,则删除Widget();

【讨论】:

  • 谢谢@zenith,但这只是构造函数在cpp文件中实现的完整代码的一部分
【解决方案2】:

[已解决]我真的用GCC编译器,CodeBlocks,问题来自环境,当我关闭编辑器然后打开同一个项目然后编译它编译成功,我不知道发生了什么, 感谢每一个人

【讨论】:

    猜你喜欢
    • 2018-05-07
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2015-08-23
    • 1970-01-01
    • 2016-04-27
    • 2014-04-21
    相关资源
    最近更新 更多