我正在尝试使用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’
我做错了什么?我该如何使用指针?对不起,如果这是一个愚蠢的问题。我对指针并不是很熟悉,我正在尝试理解这个概念。
答案 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)
因此,实现中的基本操作数不是指针而是引用,它与.
运算符一起使用。