C ++在函数中使用指向struct的指针

时间:2017-07-18 10:21:43

标签: c++ pointers struct parameters reference

我正在尝试使用C ++中的结构指针。我有成员MAC的struct wSignal。我给函数提供了一个结构的指针。

定义struct:

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’

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

3 个答案:

答案 0 :(得分:4)

您将参数声明为引用(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);

答案 1 :(得分:1)

您正在向struct提供一个指针给一个期望引用struct的函数。

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

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

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

答案 2 :(得分:0)

您对DoesPeriodExist()的定义不期望指针,而是指向wSignal的引用。正确的签名是

bool DoesPeriodExist(wSignal* s)

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