0

我创建了一个名为“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

4

5 回答 5

3

尝试更新

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

Triangle Object;    // this defines Object

还阅读最令人烦恼的解析

如果您使用 C++11,则可以Object使用列表初始化进行初始化

Triangle Object{};    // value-initialization (to zero)
Triangle Object{2.0}; // direct-list-initialization
于 2013-08-21T10:54:36.910 回答
0
Triangle Object();  // Declare a function Object return a Triangle

这可能是两件事:

  1. Triangle 类的变量 Object 的变量定义
  2. 函数 Object 的函数声明,它返回 Triangle 类型的对象

C++ 标准要求必须将此 lign 解释为第二点。

它被称为最令人头疼的解析

您可以通过以下方式更改它:

Triangle Object;

或者在 C++11 中:

Tirangle Object{}; // Useful when parameters are needed
于 2013-08-21T11:07:39.393 回答
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;
}
于 2013-08-21T10:57:19.370 回答
0

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

于 2013-08-21T11:34:52.417 回答
0

那是因为您在编写此代码时没有创建 Triangle 的实例:

Triangle Object();

这在本地(在 main() 的范围内)声明了一个Object具有空参数列表和返回类型的函数Triangle。它不实例化类型对象,Triangle因此不调用实例的默认构造函数。但是,后者显然是您的意图。

您可以通过简单地编写来修复它:

Triangle Object;
cout << Object.SideA;

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

Triangle object;
cout << object.SideA;
于 2013-08-21T11:03:46.343 回答