VC++说"没有重载函数需要7个参数"我说是的!

JnB*_*ymn 3 c++ compiler-errors visual-c++

在我的PDBComponent类的头文件中,我刚刚为两个构造函数创建了一个新的构造函数:

class PDBComponent {
    public:
        PDBComponent(string name,double min_current,double nom_current,
                     double max_current, EPSCommands* command_ptr, double delay);
        PDBComponent(string name,double min_current,double nom_current,
                     double max_current, EPSCommands* command_ptr, EPSFault* fault_ptr ,double delay);
...
Run Code Online (Sandbox Code Playgroud)

当我使用第一个构造函数时,我没有编译错误.像这样:

PDBComponent component = PDBComponent("STX"     ,0.1,  0.5,  1.0
        ,new EPSCommands( 1.0, 3.0),0.0);
Run Code Online (Sandbox Code Playgroud)

但是,当我使用第二个构造函数时,我得到一个编译错误::

PDBComponent component = PDBComponent("STX"     ,0.1,  0.5,  1.0
        ,new EPSCommands( 1.0, 3.0), new EPSFault(EPSFault::OpenCircuit,2.0),0.0);
Run Code Online (Sandbox Code Playgroud)

编译错误:

错误C2661:'fs5system :: PDBComponent :: PDBComponent':没有重载函数需要7个参数

我想也许我正在使用一个头文件,而编译器正在查看另一个头文件,所以我注释掉了第一个构造函数.编译器显示它正在重新编译PDBComponent.cpp然后显示错误:

错误C2511:'fs5system :: PDBComponent :: PDBComponent(std :: string,double,double,double,fs5system :: EPSCommands*,double)':'fs5system :: PDBComponent'中找不到重载的成员函数

...表示编译器确实在查看正确的头文件.

有谁知道为什么我看到这种行为?

我正在使用Visual Studios C++进行编译.


更多线索:

我刚刚在头文件中的类定义中添加了以下行:

bool trash() {return true;}
Run Code Online (Sandbox Code Playgroud)

并测试它

PDBComponent* component;
component = new PDBComponent("STX"     ,0.1,  0.5,  1.0
        ,new EPSCommands( 1.0, 3.0),0.0);

cout << component->trash() << endl;
Run Code Online (Sandbox Code Playgroud)

在我的主文件中.编译时,再次编译PDBComponent标头.我收到错误消息:

错误C2039:'trash':不是'fs5system :: PDBComponent'的成员

Mic*_*urr 5

所以,你会得到一个错误时,当你在头评论它正在编译的6参数的构造函数-但是是同一个源文件,其中包含调用到构造函数?是否有可能以某种方式将不同的头用于该编译(可能涉及预编译的头部怪异).

尝试使用/showIncludes选项("C++ |高级|显示包括"在IDE的项目设置)和/或关闭预编译的头,看看你得到任何进一步的线索或更好的性能.