正在读取类变量

Reading class variable

本文关键字:类变量 读取      更新时间:2023-10-16

我创建了一个名为"Triangle"的类,现在正试图从主节中读取某个类变量("SideA")。我特别声明SideA为"公共",以防止访问问题。然而,当试图编译时,程序会抛出错误"class 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}"),但我真的每次想读出一个数字都必须写一个函数吗?

提前感谢您,JustTestAcc

尝试更新

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

将其设为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;
}

这是因为在编写以下内容时没有创建Triangle的实例:

Triangle Object();

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

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

Triangle Object;
cout << Object.SideA;

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

Triangle object;
cout << object.SideA;
Triangle Object();  // Declare a function Object return a Triangle

这可以是两件事:

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

C++标准要求这个对齐必须被解释为第二个点。

它被称为最令人烦恼的解析。

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

Triangle Object;

或者在C++11:中

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

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