读类变量

时间:2013-08-21 10:52:54

标签: c++ class member

我创建了一个名为“Triangle”的类,现在我正试图从主要部分读出某个类变量(“SideA”)。我特别宣称SideA是“公共的”以防止访问问题。 但是,在尝试编译时,程序会抛出错误“类Triangle没有名为SideA的成员”。

我正在为你贴上最重要的部分:

class Triangle
{
public:
float SideA;
};

int main ()
{
Triangle Object(); //pair is normally filled with several vars for the constructor)

//I declared "Object" correctly, it can be constructed. "SideA" is filled by the 
//constructor. I'm just leaving it out 
//right now to keep this text short

//This line is marked when the IDE aborts the compiling process
cout << Object.SideA;

我希望你能帮助我,因为我真的不知道如何解决这个问题。我正在学习的书籍建议为这些目的使用特殊功能(“void readOut {return X}”),但每次我想读出一个数字时,我是否真的必须编写一个函数?

提前谢谢你, JustATestAcc

5 个答案:

答案 0 :(得分:3)

尝试更新

Triangle Object();  // This declares a function which returns Triangle type

Triangle Object;    // this defines Object

另请阅读most vexing parse

如果是C ++ 11,则可以使用list initialization

初始化Object
Triangle Object{};    // value-initialization (to zero)
Triangle Object{2.0}; // direct-list-initialization

答案 1 :(得分:0)

将其设为Triangle Object;

尝试以下..;)

#include<iostream>

using namespace std;


class Triangle
{
public:
float SideA;
};

int main ()
{
Triangle Object; //this defines object

//I declared "Object" correctly, it can be constructed. "SideA" is filled by the
//constructor. I'm just leaving it out
//right now to keep this text short

//This line is marked when the IDE aborts the compiling process
cout << Object.SideA;
}

答案 2 :(得分:0)

那是因为你写这篇文章时没有创建Triangle实例:

Triangle Object();

这在本地(在main()的范围内)声明了一个函数Object,其中包含一个空参数列表和一个返回类型Triangle。它不实例化Triangle类型的对象,因此不会调用实例的默认构造函数。然而,后者是你显然想要的。

您可以通过简单地写一下来解决它:

Triangle Object;
cout << Object.SideA;

此外,我建议你不要用大写字母开始变量名。在许多编码约定中,正如您在Triangle中所做的那样,类型以大写字母开头。 Triangle的实际实例稍后可能会与类型名称混淆,并且不会被识别为类型实例的名称。从上下文中使用它的名称将变得明显它的确是什么,但是必须扫描某些内容的上下文以找出它实际代表的内容是乏味和不必要的:

Triangle object;
cout << object.SideA;

答案 3 :(得分:0)

Triangle Object();  // Declare a function Object return a Triangle

这可以是两件事:

  1. 类Triangle
  2. 的变量Object的变量定义
  3. 函数Object的函数声明,它返回Triangle类型的对象
  4. C ++标准要求必须将此lign解释为第二点。

    它被称为Most vexing parse

    您可以通过以下方式进行更改:

    Triangle Object;
    

    或者在C ++ 11中:

    Tirangle Object{}; // Useful when parameters are needed
    

答案 4 :(得分:0)

你可以做,Triangle * Object = new Triangle(); 或者,三角形对象;