gpt4 book ai didi

c++ - 将常量引用传递给对象 C++

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:45 25 4
gpt4 key购买 nike

这是我的代码:

#include <cstdlib>
#include <vector>
#include <iostream>
#include <cstring>

using namespace std;

class GeneralMatrix {
public:
GeneralMatrix(const string & n, int nr, int nc);
GeneralMatrix * add (const GeneralMatrix&);
const double get(int row, int col){}
void set(int row, int col, double val){}
};

GeneralMatrix * GeneralMatrix::add(const GeneralMatrix& m2){
if (height != m2.height || width != m2.width) {
throw "Matrix sizes must match!";
}
for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {
double val = m2.get(i, j);// Error
if (val != 0) {
val += get(i, j);
set(i, j, val);
}
}
}
}

int main(int argc, char** argv) {

GeneralMatrix* a ;
GeneralMatrix* b ;
(*a).add(*b);
return 0;
}

当我调用添加函数时,我的程序产生了这个错误

main.cpp:78:41: error: passing ‘const GeneralMatrix’ as ‘this’ argument of ‘const double GeneralMatrix::get(int, int)’ discards qualifiers [-fpermissive]
double val = m2.get(i, j);

所以问题出在不断的争论上,但我不知道为什么。 get 方法是常量,与 add 方法一样,根本不会改变对象。

最佳答案

如果对象(或您用来访问它的引用)是常量,那么您只能在其上调用常量成员函数。 get 不是常量,但几乎可以肯定是:

double get(int row, int col) const {}
^^^^^

使返回值常量通常不是一个好主意,所以我删除了 const

关于c++ - 将常量引用传递给对象 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com