【发布时间】:2010-08-16 19:47:57
【问题描述】:
在我的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);
...
当我使用第一个构造函数时,我没有得到任何编译错误。像这样:
PDBComponent component = PDBComponent("STX" ,0.1, 0.5, 1.0
,new EPSCommands( 1.0, 3.0),0.0);
但是,当我使用第二个构造函数时,我得到一个编译错误::
PDBComponent component = PDBComponent("STX" ,0.1, 0.5, 1.0
,new EPSCommands( 1.0, 3.0), new EPSFault(EPSFault::OpenCircuit,2.0),0.0);
编译错误:
错误 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;}
并用
对其进行了测试PDBComponent* component;
component = new PDBComponent("STX" ,0.1, 0.5, 1.0
,new EPSCommands( 1.0, 3.0),0.0);
cout << component->trash() << endl;
在我的主文件中。编译时,再次编译 PDBComponent 标头。我收到错误消息:
错误 C2039:“垃圾”:不是“fs5system::PDBComponent”的成员
【问题讨论】:
-
当你注释掉第一个ctor时,你在第二次使用时是否仍然得到错误?
-
这就是你所说的吗? (“STX”后面的空格是什么意思,为什么错误消息将“STX”称为
std::string而不是?) -
你有没有尝试用一些假代码重现这个问题(空类,构造函数的空体采用 7 个参数与你的参数相似)?
-
您是复制粘贴以上内容还是重新输入问题?
-
我会去处理一些中间文件损坏。进行全面重建。
标签: c++ visual-c++ compiler-errors