使用最新版本的NetBeans运行Ubuntu 11.10的默认安装。我有类似以下内容:
class MyClass {
public:
Type1 RunAlgo();
private:
Type2 Run();
}
Type1 MyClass::RunAlgo() {
//additional code
return Run();
}
Type2 Run() {
//additional code
Type2 obj;
return obj;
}
Type1和Type2完全不相关。当我编写Run()方法时,我在返回类型中输入了一个拼写错误,并且对它编译感到惊讶。我只是想知道为什么这不会返回错误并且编译好了?我错过了什么?
编辑:新样本。这确实会产生一个独立项目的错误。似乎无法发现为什么真正的项目确实会编译。
class Node { };
//only difference here is that in my code I have a custom comparer
typedef map<Node*, map<Node*, double> > Network;
class HMM {
Network _network;
};
class Algorithm {
public:
HMM RunAlgo();
private:
Network _network;
Network Run();
};
HMM Algorithm::RunAlgo() {
return Run();
}
Network Algorithm::Run() {
return _network;
}
EDIT2:
我为我严肃的问题和例子道歉。关于例子,我将来会更加小心。我已经工作了10多个小时而且失去了焦点。以下示例再现了我的案例:
#include <map>
using std::map;
class Node {
};
typedef map<Node*, map<Node*, double> > Network;
class HMM {
public:
HMM(const Network& network) {};
Network _network;
};
class TestClass {
public:
HMM RunAlgo(int x, int y);
private:
Network _network;
Network Run();
};
HMM TestClass::RunAlgo(int x, int y) {
return Run();
}
Network TestClass::Run() {
return _network;
}
将该特定构造函数添加到HMM类后,它可以毫无问题地编译。我不知道这可以做到,因为这是我第一次遇到这种情况。如果我浪费你的时间,我再次道歉,我感谢你试图帮助我。
答案 0 :(得分:1)
答案 1 :(得分:1)
您没有显示您的实际代码;你给我们的例子不编译(Debian / Sid / AMD64上的GCC 4.6)
% g++ -Wall exmorat.cc
exmorat.cc:3:9: error: 'Type1' does not name a type
exmorat.cc:5:9: error: 'Type2' does not name a type
exmorat.cc:8:7: error: expected initializer before 'MyClass'
但是,当您涉及转换或投射时,您所描述的内容可能会发生。您应该显示您的实际代码(或显示症状的简化代码)以获得真正的帮助。