为什么编译器没有显示这些返回类型的错误?

时间:2011-11-05 17:11:06

标签: 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
    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类后,它可以毫无问题地编译。我不知道这可以做到,因为这是我第一次遇到这种情况。如果我浪费你的时间,我再次道歉,我感谢你试图帮助我。

2 个答案:

答案 0 :(得分:1)

修复非测试用例中的错误my compiler does error out

Type1Type2不相关的陈述必须是错误的。

下次关注真实的测试用例。

答案 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'

但是,当您涉及转换或投射时,您所描述的内容可能会发生。您应该显示您的实际代码(或显示症状的简化代码)以获得真正的帮助。