【问题标题】:Unresolved external symbol after every change in code每次更改代码后未解析的外部符号
【发布时间】:2011-07-31 12:47:35
【问题描述】:

我的代码有问题。基本上是这样的:

someclass.hpp:

class SomeClass
{
 public:
    SomeClass();
    ~SomeClass();

    //... some other methods
};

someclass.cpp:

#include "SomeClass.hpp"
SomeClass::SomeClass()
{
}

SomeClass::~SomeClass()
{
}

SomeClass.cpp 不包含任何其他内容。

构造函数实际上也是空的。我只是不想让它们未定义或离开标准构造函数,因为我以后可能会需要它。

SomeClass.hpp 实际上是一个游戏状态类,它只包含在一个地方:

main.cpp

#include "SomeClass.hpp"

int main()
{
   DoSomethingWithGamestate(new SomeClass());
   return 0;
}

然后该项目包含许多其他文件,但所有这些文件都独立于 SomeClass。

问题是每当我更改代码中的任何内容时,无论是在哪个文件中,我都必须重新编译整个解决方案,因为如果我只编译更改,链接器会抛出这个:

error LNK2001: unresolved external symbol "public: __thiscall SomeClass::SomeClass(void) (??blablaSomeClassblabla)

显然,这里发生了一些奇怪的事情,因为 SomeClass() 在 someclass.cpp 中明确定义。

这可能是什么原因?

【问题讨论】:

    标签: c++ visual-studio visual-studio-2010 linker-errors


    【解决方案1】:

    除了@Nawaz 所说的之外,您的构建文件可能与链接器不同步,因此当 Visual Studio 重新链接时,由于文件不同步,它不能。只需重新构建并完成它。

    顺便说一句,它甚至可能是 Visual Studio 2010 as seen here 中的一个错误。

    【讨论】:

    • 我之所以问,是因为为几个更改重建整个项目非常麻烦,因为它需要一段时间(现在大约需要 2 分钟,随着时间的推移,这个数字肯定会增长得相当快)并且减慢调试速度。有没有办法确保构建文件保持最新?我可以手动更新它们而不重建整个东西吗?
    • @heishe:重建是一种痛苦,是的。您可以尝试“制作”文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2011-02-09
    • 2017-04-17
    • 2012-11-10
    相关资源
    最近更新 更多