【问题标题】:Error: No Matching function to call to 'online'错误:没有匹配的函数来调用“在线”
【发布时间】:2013-06-29 15:09:03
【问题描述】:

我知道这可能是一个非常简单的解决方法,但我很难找到我的错误所在,而且我在网上查看的所有帖子都无法帮助我。我在 cout 线上得到错误。代码如下:

#include <iostream>

bool online(int a, int network[a][a]) {
    /*post condition: returns true if every switch in a network is of even degree. Otherwise, returns false.*/
    int switches;
    for(int x=0; x < a; x++) {
        switches = 0;
        for(int y=0; y < a; y++)
            if(network[x][y])
                switches += 1;
        if(switches & 1)
            return 0;
    }
    return 1;
}

int main() {
    int arrayOne[6][6] =
    {
        {0,1,1,0,0,0},
        {1,0,0,1,0,0},
        {1,0,0,1,0,0},
        {0,1,1,0,1,1},
        {0,0,0,1,0,1},
        {0,0,0,1,1,0}
    };
    int arrayTwo[8][8] =
    {
        {0,1,1,0,0,0,0,0},
        {1,0,0,1,0,0,0,0},
        {1,0,0,1,0,0,0,0},
        {0,1,1,0,1,0,0,0},
        {0,0,0,1,0,1,1,0},
        {0,0,0,0,1,0,0,1},
        {0,0,0,0,1,0,0,1},
        {0,0,0,0,0,1,1,0}
    };
    std::cout << online(6, arrayOne) << std::endl;
    std::cout << online(8, arrayTwo) << std::endl;
}    

【问题讨论】:

  • 我收到错误 Array has incomplete element type int '[]' ,是的,如果任何行中有奇数则返回 false
  • 请仅使用您使用的语言标记您的帖子。我将其编辑为仅c++,如果您使用不同的语言并且我误读了您的帖子,请删除c++ 标签并仅输入您使用的特定语言。
  • 我在同一个地方仍然遇到同样的错误。
  • 我怀疑是否有任何将数组大小与参数相关联。您必须使用更抽象的数组声明。

标签: c++


【解决方案1】:

对于 C99(支持可变长度数组),没有 &lt;iostream&gt;。确保将程序编译为 C 而不是 C++,然后改用 &lt;stdio.h&gt;,并包含 &lt;stdbool.h&gt;

printf("%d\n", online(6, arrayOne));
printf("%d\n", online(8, arrayTwo));

对于 C++,您的编译器可能不支持可变长度数组。您应该为online() 使用模板。

template <unsigned a>
bool online(int, int (&network)[a][a]) {
    //...
}

【讨论】:

  • 只是一个关于你第一句话的问题。 C99 是否支持二维可变长度的数组?
  • 好办法jxh。你解决了!有没有办法在不传递大小的 int 的情况下制作函数?
  • @Dbz:是的。第一个参数是不用的,所以你可以定义没有第一个参数的函数没有问题。
  • 谢谢jhx。感谢您的帮助
猜你喜欢
  • 2013-05-05
  • 2012-12-28
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-01-18
  • 1970-01-01
相关资源
最近更新 更多