【问题标题】:Constructor not working "error: no match for call to '(<class name>) (int&, int&)"构造函数不工作“错误:不匹配调用 '(<class name>) (int&, int&)”
【发布时间】:2016-06-26 19:10:41
【问题描述】:

我写了一个简单的程序,它有几个可能的输入(i,c,l,v..)。第一个输入是“i m n”,其中 m 和 n 是整数值。此命令生成具有 m 行和 n 列的 2D 数组。这是我的代码:

class myarray
{
    char** grid;
    int dimX,dimY;
public:
    myarray(){grid=0;}
    myarray(int m,int n) {grid = new char* [m]; for(int i=0;i<m;i++) {grid[i]=new char [n];} dimX=m; dimY=n;}
    ~myarray(){for(int i = 0; i < dimX; ++i) {delete[] grid[i];} delete[] grid;}
    char** fetcharray(){return grid;}

int main()
{
    srand(time(NULL));
    bool check(true),arrayinitialized(false);
    while(check)
    {
        char a; //a-firstinp;
        int m,n; //m,n-grid size

        cin>>a;

        myarray c;

        switch(a)
        {
        case 'i':
        case 'I': {cin>>m>>n;
                  **c(m,n);**
                  arrayinitialized=true;
                  break;}
        case ...:...
        default:{cout<<"Invalid input! Try again: "; break;}

但是,如果 'i': ...; c(m,n);说“错误:不匹配调用'(myarray)(int&,int&)'”。 当我声明变量 myarray c;如果作为局部变量 (myarray c(m,n)) 一切正常。但是,我希望变量 c 可以被其他情况访问,因此需要它在整个 main() 函数中可用,就像在上面的代码中一样。 有谁知道出了什么问题,我该如何解决? 提前谢谢!

【问题讨论】:

  • 使用vector&lt;vector&lt;char&gt;&gt;而不是char**,你会省去很多麻烦。

标签: c++ arrays matrix constructor switch-statement


【解决方案1】:
myarray c;    
c(m, n);

- 第二行要求myarray 具有operator()。它不会调用构造函数。 (再次?)

试试

myarray c(m, n);

在使用时,或使myarray 可正确复制和

c = myarray(m, n);

我记得有些人告诉过你默认构造函数被破坏了,以及复制赋值...The Rule of three。所以去吧!


我希望变量 c 可以被其他情况访问

那么它应该在循环之外。

【讨论】:

  • 从现在开始我将永远使用三法则!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-08
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2015-05-09
  • 2013-04-23
相关资源
最近更新 更多