【问题标题】:invalid type argument of unary '*' (have 'bool')一元'*'的无效类型参数(有'bool')
【发布时间】:2016-06-01 13:27:09
【问题描述】:

我对@9​​87654322@ 很陌生,目前正在尝试学习指针。以下是我的程序的代码,我收到了错误:

错误:一元'*'的无效类型参数(有'bool')

我正在尝试为数组指针的i index 设置一个新值。我在这里做错了什么?

int opendoors(int n, int r)
{
    bool * open = new bool[n];

    for (int i = 0; i <= n; i++)
    {
        *open[i] = 1;
    }

    int incdoor = 1;
    for (int i = 0; i < r; i++)
    {
        for (int j = n - 1; j >= 0; j--)
        {
            *open[i - incdoor] = 0;
        }

        for (int k = 0; k < n; k++)
        {
            *open[i + incdoor] = 1;
        }

        incdoor++;
    }

    int count = 0;
    for (int i = 0; i <= n; i++)
    {
        if (*open[i] == 1)
        {
            count++;
        }
    }

    delete [] open;

    return count;
}

int main()
{
    int n, r;
    std::cin >> n >> r;
    std::cout << opendoors(n, r) << std::endl;

    return 0;
}

【问题讨论】:

  • *open[i] = 1; 更改为open[i] = true;
  • 这不是完整的错误信息。它至少包括一个行号,这是重要的信息。一般来说,如果你迷路了,总结是个坏主意。
  • PS:在 C++ 中使用 truefalse 而不是 1 和 0
  • @EdHeal 感谢您的帮助和提示!
  • 建议阅读:comp.lang.c FAQ 的第 6 节。它是关于 C 的,但该部分的大部分或全部内容也适用于 C++。

标签: c++ pointers


【解决方案1】:

只需open[i]。您可以在指针上使用数组索引或取消引用运算符,但不能同时使用。

【讨论】:

  • 从来不知道,但这是有道理的。谢谢!
  • @Quiver 如果考虑类型,openbool*,所以 open[i] 只是 bool。所以*open[i] 试图在bool 类型的对象上使用* 运算符。这是无效的用法。
【解决方案2】:

这不是您问题的直接答案,但您应该注意这一点。您的代码中有一个错误。您的函数接受两个整数参数,第一个参数n 用于创建布尔变量的动态数组。然而;在您设置循环范围以处理动态数组的两个 for 循环中,您使用了错误的比较运算符 &lt;=。这应该是&lt;。你能猜到为什么吗?当您开始在数组中使用索引时,它们是基于0 的。因此,假设您将3 传递给函数的第一个参数;这将创建 3 个布尔变量的动态数组。现在在您的 for 循环中,您从 0 开始您的索引 i,这是正确的,但是当它与 &lt;= 进行比较时,让我们看看会发生什么:

i = 0; // First Index
i = 1; // Second Index
i = 2; // Third Index
i = 3; // Fourth Index - Still a Valid pass of the for loop because the condition is true;
       // however, we have a memory problem because the index i is out of bounds as there 
       // are only 3 bools in the array and not 4. 

【讨论】:

  • 是的,我在发布此问题后查看代码时实际上注意到了这一点。我知道它超出了界限,只是错过了我在制作 for 循环时输入的内容。感谢您指出这一点:)
猜你喜欢
  • 2021-10-15
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-20
相关资源
最近更新 更多