为什么编译器不显示这些返回类型的错误?
Why doesn't the compiler show an error with these return types?
使用最新版本的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类后,它的编译没有问题。我不知道可以这样做,因为这是我第一次遇到这种情况。如果我浪费了您的时间,我再次向您道歉,并感谢您试图帮助我。
在修复了非测试用例中的错误后,我的编译器会出错。
你关于Type1
和Type2
不相关的陈述一定是错的。
你没有展示你的实际代码;你给我们的例子不编译(GCC 4.6在Debian/Sid/AMD64)
% 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'
但是当涉及到转换或强制转换时,您所描述的情况可能会发生。您应该展示实际代码(或显示症状的简化代码)以获得真正的帮助。
相关文章:
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- C++中函数的向量返回类型引发错误
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 返回派生类型时出现协变类型错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 尝试使用具有尾随返回类型的 lambda 进行 SFINAE 时出现硬错误
- 错误:控制到达非空函数的末尾 [-Werror=返回类型] } ^
- 尾随返回类型中带有 SFINAE 的 GCC 错误
- 返回类型布尔函数中的声明语法错误
- 当我返回节点*时,C++中出现未知类型错误
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- 带有返回类型的错误调用模板到会员函数
- C 函数返回类型错误
- 无效的协变返回类型错误
- 嵌套迭代器和接口中的"无效协变返回类型"错误
- 嵌套类中的"无效协变返回类型"错误,该方法返回基于模板的对象
- 方法的C++继承,但返回类型错误(自动转换?typeid(*this)?)
- clang++为模板化类中模板化方法的特化自动返回类型错误