2
所以,我有這樣的類:Matrix
和Matrix_Proxy
。兩者都應該檢查範圍是否有效,但在這裏我忽略了,因爲這不是問題。運營商矩陣類代理[]錯誤
只要對象是非常量的,就沒有問題,但這是行不通的。通過const&
發送功能參數是有效的做法,因此它在這裏失敗。
代碼(簡化):
#include <vector>
#include <cstdlib>
#include <iostream>
template <typename T>
class Matrix_Proxy
{
public:
Matrix_Proxy(std::vector<T>& _ref, size_t _size) : ref(_ref), size(_size)
{}
T& operator[](int i)
{
return ref[i];
}
const T& operator[](int i) const
{
return ref[i];
}
private:
std::vector<T>& ref;
size_t size;
};
template <typename T>
class Matrix
{
public:
Matrix(size_t x) : values(x), size(x)
{
for(auto&& y : values)
{
y.resize(x);
for(auto&& x : y)
x = 0;
}
}
Matrix_Proxy<T> operator [] (int i)
{
return Matrix_Proxy<T>(values[i],size);
}
const Matrix_Proxy<T> operator [] (int i) const
{
return Matrix_Proxy<T>(values[i],size);
}
private:
std::vector<std::vector<T>> values;
size_t size;
};
int main()
{
Matrix<int> intMat(5); //FINE
std::cout << intMat[2][2] << std::endl; //FINE
const Matrix<int> cintMat(5); //FINE
std::cout << cintMat[2][2] << std::endl; //ERROR
_Exit(EXIT_SUCCESS);
}
錯誤:
no matching function for call to 'Matrix_Proxy<int>::Matrix_Proxy(const value_type&, const size_t&)'
return Matrix_Proxy<T>(values[i],size);
^
任何想法如何解決這個問題?
哇,一切都很完美:)但我仍然擁有std :: vector,但是,那不能被幫助。謝謝 :) –
xinaiz