无法从返回引用的函数中比较字符串引用
Visual Studio 版本 16.10.3、C++17、Win10-64。
我无法弄清楚这一点。我想我已经把所有流行语都弄对了,但我收到以下代码的错误:
#include <string>
using namespace std;
class AssetID {
private:
string& asset_Name;
public:
const string& getName() { return asset_Name; }
}; // class AssetID
static
bool compareName(const AssetID* lhs, const AssetID* rhs) {
return lhs->getName() < rhs->getName();
};
Code Description Project File Line Suppression State
C2662 'const std::string &AssetID::getName(void)': cannot convert 'this' pointer from 'const AssetID' to 'AssetID &' HOAAnalysis DTest.h 15
C2662 'const std::string &AssetID::getName(void)': cannot convert 'this' pointer from 'const AssetID' to 'AssetID &' HOAAnalysis Test.h 15
回答
const AssetID* lhs
这是一个指向const对象的指针。取消引用它会给你一个const对象。当你有一个const对象时,你只能调用它的const方法。
const string& getName() { return asset_Name; }
这不是一种const方法。它是一种返回对const对象的引用的方法,这不是一回事。这应该是:
const string& getName() const { return asset_Name; }
现在你有了一个const类方法。
- `string& asset_Name;` 本身可能值得一提。拥有引用成员变量_经常_是一个错误,我将假设在这种情况下是错误的。