【问题标题】:C++ use pointer to struct in functionC ++在函数中使用指向结构的指针
【发布时间】:2017-07-18 10:21:42
【问题描述】:

我试图给我们一个指向 C++ 结构的指针。我有 struct wSignal 和成员 MAC。我将结构的指针指向函数。

定义结构:

struct wSignal
{
    std::string MAC;
};

使用函数:

wSignal it1 = {"22:44:66:AA:BB:CC"};
DoesPeriodExist(&it1);

函数定义:

bool DoesPeriodExist (wSignal& s)
{
   if(it1->MAC != "")
}

我得到的错误:

error: base operand of ‘->’ has non-pointer type ‘wSignal’

我做错了什么?如何使用指针?对不起,如果这是一个愚蠢的问题。我对指针不是很熟悉,正在尝试理解这个概念。

【问题讨论】:

  • DoesPeriodExist(it1);调用它;引用已经在函数参数的定义中。
  • wSignal& 指定引用类型,而不是指针
  • 指向struct wSignal 的指针是wSignal *s
  • 你是指函数中的if(it1->MAC != "") - 还是if(s->MAC != "")

标签: c++ pointers struct parameters reference


【解决方案1】:

您将参数声明为引用(对wSignal),而不是指针,在这种情况下,您应该将函数更改为

bool DoesPeriodExist (wSignal& s)
{
   if(s.MAC != "") ...
}

并像

一样传递参数
wSignal it1 = {"22:44:66:AA:BB:CC"};
DoesPeriodExist(it1);

如果你想用指针,那么参数类型应该改为指针(到wSignal

bool DoesPeriodExist (wSignal* s)
{
   if(s->MAC != "")
}

并像您的代码显示的那样传递参数

wSignal it1 = {"22:44:66:AA:BB:CC"};
DoesPeriodExist(&it1);

【讨论】:

    【解决方案2】:

    您将 指针 指向 struct 的函数,该函数需要 引用struct

    这是一个需要修复的不匹配:

    • 您可以传递struct 本身、DoesPeriodExist(it1)
    • 你可以接受一个指针,bool DoesPeriodExist (wSignal* s)

    wSignal 必须为非空的情况下,第一种方法更可取。如果您希望允许将NULL 传递给DoesPeriodExist,则只有第二种方法可行,因为不允许NULL 引用。

    【讨论】:

      【解决方案3】:

      您对DoesPeriodExist() 的定义并不需要指针,而是对wSignal 的引用。正确的签名是

      bool DoesPeriodExist(wSignal* s)
      

      因此,实现中的基操作数不是指针而是引用,它与. 运算符一起使用。

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 2017-01-22
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        相关资源
        最近更新 更多