我认为您的一些命名约定给您带来了一些混乱。如上所述,您遇到了传递给构造函数的suit和facevalue参数的上下文问题。这意味着在构造方法的上下文中,西装实际上意味着作为参数传入的西装,而不是作为类 Card 的成员变量的西装。人们通常使用命名约定来帮助避免这种混淆,例如在类的每个数据成员前面放置一个m_,这样suit就会变成 m_suit。你可以使用任何你喜欢的东西,但是这样其他人的代码会马上知道 m_suit 是一个数据成员。
另一点是您可以并且可能应该在执行构造函数的代码之前初始化类的数据成员。这称为“初始化列表”,将按如下方式完成(假设您更改为上面的命名约定)。
Card::Card (Suit suit, Value facevalue)
: m_suit (suit), m_facevalue (facevalue)
{
// no code needs to go here
}
出于效率原因,养成这种习惯是个好主意。此外,在构造函数中使用this指针通常不是一个好主意。这并不违法,但会给你带来麻烦。
至于点运算符不起作用,从您的问题中不清楚您在哪里使用点运算符。如果您指的是上面的::语法,那并不是真正的运算符,它是 C++ 语法的一部分,表明您正在取消引用该类。如果您已将suit和facevalue数据成员声明为static ,该语法将起作用,但这不是您想要做的。
您提到您在多个头文件中声明 Card 类 - 这也很糟糕。