首页 > 解决方案 > 无法比较来自函数返回引用的字符串引用

问题描述

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  

标签: c++c++17

解决方案


const AssetID* lhs

这是一个指向const对象的指针。取消引用它会给你一个const对象。当你有一个const对象时,你只能调用它的const方法。

const string& getName() { return  asset_Name; }

这不是一种const方法。它是一种返回对const对象的引用的方法,这不是一回事。这应该是:

const string& getName() const { return  asset_Name; }

现在你有了一个const类方法。


推荐阅读