C++ 为什么';编译器是否显示这些返回类型的错误?

C++ 为什么';编译器是否显示这些返回类型的错误?,c++,function,compiler-errors,return-type,C++,Function,Compiler Errors,Return Type,使用最新版本的NetBeans运行Ubuntu 11.10的默认安装。我有一些类似于以下内容: class MyClass { public: Type1 RunAlgo(); private: Type2 Run(); } Type1 MyClass::RunAlgo() { //additional code return Run(); } Type2 Run() { //additional code Ty

使用最新版本的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;
}
类型1和类型2完全不相关。在编写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;
}
类节点{};
//这里唯一的区别是我的代码中有一个自定义比较器
地图网络;
班级嗯{
网络-网络;
};
类算法{
公众:
HMM RunAlgo();
私人:
网络-网络;
网络运行();
};
HMM算法::RunAlgo(){
返回运行();
}
网络算法::Run(){
返回网络;
}
编辑2:

我为我的问题和例子表述不当而道歉。我以后会更仔细地讨论示例。我已经工作了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;
}  
#包括
使用std::map;
类节点{
};
地图网络;
班级嗯{
公众:
HMM(const-Network&Network){};
网络-网络;
};
类TestClass{
公众:
HMM-RunAlgo(intx,inty);
私人:
网络-网络;
网络运行();
};
HMM TestClass::RunAlgo(int x,int y){
返回运行();
}
网络测试类::运行(){
返回网络;
}  

在将特定构造函数添加到HMM类之后,它编译起来没有问题。我不知道这可以做到,因为这是我第一次遇到这种情况。如果我浪费了你的时间,我再次表示歉意,我感谢你试图帮助我。

在修复了非测试用例中的错误后

您关于
Type1
Type2
不相关的陈述必须是错误的


下次注意一个真正的测试用例。

您没有显示实际的代码;您给我们的示例没有编译(Debian/Sid/AMD64上的GCC4.6)


但是当你有转换或铸造的时候,你所描述的可能会发生。您应该显示您的实际代码(或显示症状的简化代码)以获得真正的帮助。

是否输入了“一些参数”和“一些参数”?还是缺少分号?他们是问题的一部分吗?请展示你真正的测试用例,这样我们就不必浪费宝贵的时间去猜测了。我错了。将编辑掉一些参数。它们对本案并不重要。我很抱歉给您带来了困惑。也许
Type1
Type2
并不像您想象的那样不相关。请发布他们的声明(至少是他们的构造函数和赋值运算符),你是否真的在调用和使用RunAlgo(…)?@Morat:至少试试你的示例。您缺少
在类声明的末尾。即便如此,GCC还是拒绝了代码:
错误:请求将“网络”转换为非标量类型的“HMM”
。他/她应该已经在使用一段简化的代码(或“测试用例”),作为调试的基本原理的一部分。类太大了,不能在这里发布它们。我尝试用一个简化版本的代码重现这个场景,但在这种情况下,它确实产生了一个错误。我似乎看不出这两种情况之间有什么明显的区别。
% 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'