无法将"this"指针从"const container"<T>转换为"container<T> &"

cannot convert 'this' pointer from 'const container<T>' to 'container<T> &'

本文关键字:lt container gt 转换 const this 指针      更新时间:2023-10-16

我在下面的代码中得到以下STL compilation error

#include <cstdio>
#include <string>
template <typename T>
class container {
public:
container(std::string in_key="") {
m_element_index = 0;
}
~container() {
}
// Returns the numbers of elements in the container
int size() {
return m_element_index;
}
// Assignment operator
// Assigns a copy of container x as the new content for the container object.
container& operator= (const container& other) {
if (this != &other) {
for ( int idx = 0; idx < other.size(); idx++) {
}
}
return *this;
}
private:
int m_element_index;
};
int main ( int argc, char** argv) {
container<int> v1("my_container");
container<int> v2("copy_cont");
v2 = v1;
}

正在获取以下行的错误

for ( int idx = 0; idx < other.size(); idx++) {

错误为

1>------ Build started: Project: test, Configuration: Debug Win32 ------
1>  test.cpp
1>e:avinashtesttesttest.cpp(20): error C2662: 'container<T>::size' : cannot convert 'this' pointer from 'const container<T>' to 'container<T> &'
1>          with
1>          [
1>              T=int
1>          ]
1>          Conversion loses qualifiers
1>          e:avinashtesttesttest.cpp(18) : while compiling class template member function 'container<T> &container<T>::operator =(const container<T> &)'
1>          with
1>          [
1>              T=int
1>          ]
1>          e:avinashtesttesttest.cpp(30) : see reference to class template instantiation 'container<T>' being compiled
1>          with
1>          [
1>              T=int
1>          ]
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

您需要更改以下内容:

int size() {
return m_element_index;
}

到此:

int size() const {
return m_element_index;
}

告诉编译器您希望它允许在const实例上调用size()

这里您将一个const对象传递给赋值运算符:

container& operator= (const container& other) {
<...>
}

然而,在操作符内部,您正在调用othersize()函数:

for ( int idx = 0; idx < other.size(); idx++)

为了使其可用于const对象,函数本身必须声明为const:

int size() const {
return m_element_index;
}

您需要将size()声明为const方法:

int size() const {
return m_element_index;
}

因为在你的任务操作员

container& operator= (const container& other) { .... }

您正在调用other.size(),而otherreference-to-const,这意味着您只能在其上调用const方法。