从C 中调用构造函数的参数

calling a parameter from the constructor in c++

本文关键字:参数 构造函数 调用      更新时间:2023-10-16

我正在尝试使用构造函数中的东西,但我会收到编译错误这是构造函数

Matrix::Matrix(int rows, int cols, std::string matType) {
type = matType;
row = rows;
col = cols;
array= new double*[row];
for (int i = 0; i < row; ++i)
    array[i] = new double[col];
for (int i = 0; i < rows; i++)
    for (int j = 0; j<cols; j++)
        array[i][j] = 0;}

这是函数的固定

void Matrix::setElement(int i, int j, double data) {
if (i > row || j > col)
    return;
if (strcmp(type, "Any") == 0) {//here is the problem i cant use type i get compile error
    array[i][j] = data;
}
if (strcmp(type, "Arrowhead") == 0) {
    if (data != 0 && i == 0) {
        array[i][j] = data;
    }
    if (data != 0 && j == 0)
        array[i][j] = data; {
    }
    if (data != 0 && j == i) {
        array[i][j] = data;
    }
} }

这是标题(我的班级)

 class Matrix {
public:
string type;
int row, col;
double **array;
public:
Matrix(int rows, int cols, std::string matType);    // set the (i,j) element to be 'data'
void setElement(int i, int j, double data); // return the (i,j) element

问题在这里

if (strcmp(type, "Any") == 0)

ia m新的C ,我不知道我没有从std::stringconst char *的合适转换功能

a std::string不是 const char*。它不能隐式转换为一个,并且您不能将其传递给strcmp。但是您不需要。std::string是理智的类型,您可以直接比较:

if (type == "Any") {
}

对于您需要需要 a的" c弦"视图的情况,它具有一个名为 c_str()的成员函数,该函数返回了这样的指针。但同样,比较并不是这种情况。

[提示]如果您不熟悉C ,

  • 尝试不使用指针,任何地方
  • 尝试使用库而不是实现矩阵(eigen是一个很好的矩阵)
  • 请仔细阅读,如果您的代码包含new,以及如何从使用std::vector而不是使用CC_11而受益

这项小型投资将为您节省(近)将来的大量头痛。