【发布时间】:2011-11-05 17:11:05
【问题描述】:
使用最新版本的 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并没有你想象的那么不相关。请发布他们的声明(至少是他们的构造函数和赋值运算符) -
你真的在调用和使用 RunAlgo(...) 吗?
-
@Morat:至少试试你的样品。您在类声明的末尾缺少
;。即便如此,GCC 还是拒绝了代码:error: conversion from ‘Network’ to non-scalar type ‘HMM’ requested。
标签: c++ function compiler-errors return-type