0

我正在尝试创建一个类的新实例,但是当我尝试编译我的代码时收到 LNK2001 未解决的外部符号错误。

据我所知,在这两种情况下,我已经以与包含另一个课程完全相同的方式编写和包含该课程 -

#include "class.h"      // In main.cpp 

class Class {           // In class.h
   private: 
       // etc. 
   public:         
       Class(); 
       ~Class(); 
       // etc.
}; 

#include "class.h"      // In class.cpp

这些错误是否有常见/可能的原因,或者我可以找到问题根源的好方法?

编辑:错误是

“错误 1 ​​错误 LNK2019:无法解析的外部符号“类 Max __cdecl max(void)”(?max@@YA?AVMax@@XZ) 在函数 _main main.obj Racing 中引用“

编辑:在这两种情况下,一个类是跨项目中包含的 .h 和 .cpp 文件实现的。该错误仅出现在一类中。

4

1 回答 1

1

你在某处写过这个:

Max max();

您的意图是声明一个max类型为 的变量Max

C++ 认为您打算声明一个max返回类型对象的函数Max。这就是它正在寻找的东西。

如果你只是这样说:

Max max;

问题就会消失。

编辑:这只发生在不带参数的构造函数中。如果构造函数接受参数,C++ 可以从参数(将是右值,例如常量或表达式)中看出它是类的实例化而不是函数声明。

Max max(5);  // Clearly cannot be a function, because 5 is an rvalue

或者

Max max(int); // Clearly cannot be an instantiation, because int is a type

但是如果构造函数没有参数,为了区分它们,如果你在实例化,你必须去掉括号。

于 2012-05-10T19:07:10.337 回答