【问题标题】:Unresolved external symbol "public: class Foo __thiscall Bar::bu(char const *)"未解析的外部符号“public:class Foo __thiscall Bar::bu(char const *)”
【发布时间】:2012-02-03 06:05:25
【问题描述】:

这就是我所拥有的。我正在尝试使用自定义构造函数在 Bar 中创建 Foo 的实例。当我尝试从 Bar 的构造函数中调用构造函数时,我得到了外部未解析的结果。

class Foo
{
public:
    // The custom constructor I want to use.
    Foo(const char*);
};

class Bar
{
public:
    Bar();
    //The instance of Foo I want to use being declared.
    Foo bu(const char*);
};

int main(int argc, char* args[])
{
    return 0;
}

Bar::Bar()
{
    //Trying to call Foo bu's constructor.
    bu("dasf");
}

Foo::Foo(const char* iLoc)
{
}

【问题讨论】:

  • 该代码无效。当您添加成员变量时,当您想使用自定义构造函数时,您将其作为指针: Foo *bu;然后在构造函数中创建实例。
  • 这是一个链接器问题。我认为您发布的来源不足以解决您的问题。是否在同一个翻译单元(文件)中声明了所有内容?然后我认为它应该工作。如果没有,您应该编辑源代码以指示存储在哪个文件中,并提供完整的编译器和链接器命令行以及相应的输出(在这种情况下不应该那么多)。
  • @peterept:我认为它是有效的,只是 Bar::bu 被声明为返回 Foo 而不是成员变量的方法。在 Bar::Bar() 中调用 bu 方法,返回一个未使用的对象。没有多大意义,但应该可以。
  • @Axel 都在一个文件中。粘贴的示例是我用来获取错误的示例,仅此而已。我不明白为什么它不起作用
  • 对不起,我读得很快。您只是缺少 Foo bu(const char*) 函数的实现。它没有在上面的示例中列出。您声明了它,但没有提供它的实现。如果您的意思是 bu 是一个对象,那么我上面所说的是正确的。只需让 Foo *bu 成为成员并分配它。

标签: c++ class unresolved-external


【解决方案1】:

这可能就是你想要的:

class Foo
{
public:
    // The custom constructor I want to use.
    Foo(const char*);
};

class Bar
{
public:
    Bar();
   //The instance of Foo I want to use being declared.
   Foo bu; // Member of type Foo
};

int main(int argc, char* args[])
{
    return 0;
}

Bar::Bar() : bu("dasf") // Create instance of type Foo
{
}

Foo::Foo(const char* iLoc)
{
}

至于这个声明:Foo bu(const char*); 这是一个名为 bu 的成员函数的声明,它接受一个 const char* 并返回一个 Foo。未解决的符号错误是因为您从未定义函数bu,但您想要Foo 的实例而不是函数。

看到cmets后的其他方法:

class Foo
{
public:
    // The custom constructor I want to use.
    Foo(const char*);
};

class Bar
{
public:
    Bar();
    ~Bar() { delete bu;} // Delete bu
   //The instance of Foo I want to use being declared.
   Foo *bu; // Member of type Foo
};

int main(int argc, char* args[])
{
    return 0;
}

Bar::Bar() : bu(new Foo("dasf")) // Create instance of type Foo
{
}

Foo::Foo(const char* iLoc)
{
}

而且你的代码还有很多其他问题,也许买一本像 C++ Primer 这样的 C++ 书籍是个好主意。

【讨论】:

    猜你喜欢
    • 2012-12-19
    • 2018-11-13
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多