C++函数在不同的类中不起作用
C++ function not working in different class
我真的很努力使用函数和类,在VS上,我得到一个"Matrix::Matrix()"是无法访问的错误,我只是无法弄清楚为什么。
我正在尝试学习函数和类,但只是不明白!该程序基本上在一个名为Matrix
的类中使用构造函数和析构函数,并创建一个"矩阵"。我现在正在尝试使用此矩阵类中的函数从构造的矩阵内部获取值,它将返回正确的值,但不明白为什么我会收到此错误。
#include <iostream>
using namespace std;
class Matrix
{
Matrix();
private:
int M;
int N;
double *data;
int get(int i, int j){
return data[i*N+j];
}
//CONSTRUCTOR
public:
Matrix(int sizeR, int sizeC,double * input_data)
{
M=sizeR;//Rows
N=sizeC;//Columns
data = new double[M*N];//creation of 1D array, uses m&n values
cout<<"nMatrix::Matrix(int sizeR, int sizeC, double * input_data) is invokednn";
//ENTER DATA INTO MATRIX HERE:
for(int i=0;i<M*N;i++)//Loops for every data entry into 1D array, uses r&c as referenece to size
data[i] = input_data[i];//Accesses each value at specific location, inputs value 'val'
for(int i=0;i<M*N;i++)//Loops for every data entry into 1D array
cout<<data[i]<<" ";
}
//DECONSTRUCTOR
~Matrix(){
//delete data
delete []data;
cout<<"nnMatrix::~Matrix() is invokednn";
}
};
int main()
{
int sizeR, sizeC, g1, g2;
g1 = 2;
g2 = 2;
Matrix M1;
cout<<"Enter No. Rows: ";
cin>>sizeR;
cout<<"Enter No. Columns: ";
cin>>sizeC;
double * input_data;
input_data = new double[sizeR*sizeC];
//INPUTS VALUES TO ARRAY
for(int i=0;i<sizeR*sizeC;i++)//Loops for every row
input_data[i] = i+1*input_data[i-1];
Matrix(sizeR, sizeC, input_data);
cout<<"Find value at row: ";
cin>>sizeR;
cout<<"Find value at column: ";
cin>>sizeC;
M1.get(g1, g2);
}
C++ 中类的默认访问修饰符是私有的,因此如果在构造函数Matrix()
的定义之前没有显式使用 public:
访问修饰符,那么它将被视为私有的。
您希望
使用您提供的构造函数创建M1
对象。
行Matrix(sizeR, sizeC, input_data);
不会创建M1
对象。
您需要执行Matrix M1(sizeR, sizeC, input_data);
或创建具有公共可访问性的默认构造函数。
此外(正如有人指出的那样),如果Matrix::get()
不是公开的,M1.get(...)
也会导致错误。
只需将默认构造函数(声明/定义)放在类的public
部分中:
class Matrix {
public: // <<<<
Matrix() {
}
Matrix(int sizeR, int sizeC,double * input_data) {
// ...
}
// ...
};
除非另有指定,否则class
的默认作用域策略是private
。
没有
定义不带参数的构造函数,并且进一步声明private
。因此,调用
Matrix M1;
失败。只需在类中提供一个定义,例如
Matrix() {}
并使其公众可访问,它将正常工作。
编辑:get
函数也需要是公开的。接下来,这个原始数组是一件坏事,它会导致双重无损坏错误。请改用std::vector
。我想这变成了代码审查。请参阅此处,了解仍然快速肮脏但有所改进的实现。
相关文章:
- C++为什么尽管我调用了void函数,它却不起作用
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 通过构造函数创建一些值并尝试添加到文档中使用 rapidjson 不起作用
- 为什么我的数组双精度函数不起作用?
- 使用 va_arg 传递给函数va_list不起作用
- Windows.h 输入在函数之外不起作用
- 类和构造函数中的函数根本不起作用,并且不返回任何错误
- 类中的虚拟布尔函数参数不起作用
- getline 函数似乎在 C++ 中不起作用
- 将新放置与 std::函数一起使用不起作用
- binary_search() 函数在我的函数体中不起作用
- 为什么读取函数在 sha1 c++ 实现中不起作用?
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- 指针变量在 cout 函数中不起作用
- std::函数不起作用,但普通的旧函数指针可以 - 为什么?
- C++ 函数,用于查找数组中四个最小最大元素的总和不起作用
- 为什么必须使用'*p=a',而使用'p=&a'在构造函数中不起作用
- C++ Arduino - 随机函数不起作用
- QObject::连接不起作用 - 使用函数语法找不到信号
- 函数在类中不起作用-函数调用缺少参数列表