C++对象无法使用点运算符
C++ object not working with dot operator
你好,我正在开发一个C++程序,我刚开始从我创建的类中创建一些示例对象。我正在创建对象,但由于某些原因,点运算符无法处理对象
这是对象调用
Card testcard(Suit hearts, Value six);
这是构造函数
Card::Card(Suit suit, Value facevalue)
{
Card::suit=suit;
Card::faceValue=facevalue;
};
然而,点运算符不起作用,就好像对象不是真的存在一样
我在单独的部分控制大部分程序,所以有很多头文件的实例,这就是卡类所在的位置,我不确定这是否是问题的一部分
在实例方法中,不能使用句点访问实例。
改为尝试this->
:
Card::Card(Suit suit, Value facevalue)
{
this->suit=suit;
this->faceValue=facevalue;
};
或者,您可以使用初始值设定项列表:
Card::Card(Suit suit, Value facevalue) : suit(suit), faceValue(facevalue)
{ }
假设类看起来像:
class Card {
public:
Card (Suit argSuit, Value argFaceValue);
private:
Suit m_Suit;
Value m_FaceValue;
};
构造函数看起来是这样的。由于该类的成员可用于从该类创建的对象,因此无需执行任何特殊操作即可访问它们。类的成员在作用域内并且是可见的。您只需要确保函数的参数列表使用与类/对象成员不同的符号或名称。
Card::Card(Suit argSuit, Value argFaceValue)
{
m_Suit = argSuit;
m_FaceValue = argFaceValue;
}
这是对象调用
Card testcard(Suit hearts, Value six);
不,这是一个函数声明。自然,在函数名称上使用成员访问运算符(.
)是不起作用的,因为函数有自己的类型,没有成员。
要声明一个自动变量(创建一个新的对象实例),不要重复参数类型。只需说:
Card testcard(hearts, six);
我认为您的一些命名约定给您带来了一些混乱。如上所述,传递给构造函数的suit和facevalue参数遇到了上下文问题。这意味着在构造函数方法的上下文中,suit实际上意味着作为参数传入的suit,而不是作为类Card的成员变量的suit。人们通常使用命名约定来帮助避免这种混淆,例如在类的每个数据成员前面放一个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++语法的一部分,表明您正在取消对类的引用。如果您已将套装和面值数据成员声明为静态,则该语法会起作用,但这不是您想要做的
您提到在多个头文件中声明Card类,这也很糟糕。
- 使用双精度的浮点运算
- 将异常字符串解析为向量上的浮点运算?
- -O1改变浮点运算
- 将浮点运算与 Z3 C++ API 结合使用
- 序列点和运算符优先级有什么区别
- C++模运算符,使用 #define 和自己的类进行浮点运算
- 浮点运算
- 矩阵运算C++运算符重载程序错误
- 浮点运算的精度
- 为什么GDB对浮点运算的评估与C++不同
- C中的浮点运算出错
- 在Visual C++中,浮点运算优化会导致罕见而奇怪的行为
- 在 C++ 中设计点积运算符
- 为什么十进制浮点运算的提议没有被 C++0x 接受?
- 序列点与运算符优先级
- 为什么这个浮点运算被编译得如此奇怪(没有经过优化)
- 浮点运算结果的重现性
- 在浮点运算上执行平方运算和平方根运算时:表达式必须具有整型或非整型枚举类型
- C++:浮点运算的稳定性策略
- 自动获取某些代码段的浮点运算计数的方法