不能在c++中修改类中的数组



我是c++新手。我刚刚在Visual Studio Code中编写了这个程序,但是我收到了两个错误,我还没有找到一个解释。

这是代码:

#include <iostream>
using namespace std;
class net{
public: bool isConv = false;
public: int structure[2];
structure[0] = 1;      
};
int main() {
net n;
cout<< n.structure;
return 0;
}

我收到的错误是:

错误:c++要求所有声明都有类型说明符"第5行

错误:重复的成员'结构'"第6行

我认为代码认为我试图在第6行定义一个名为structure的新变量,而不是我只是试图修改数组的第一个值。

同样的两行代码工作良好,如果他们是在main()函数,但在类内,他们似乎不工作。

谁能帮我理解为什么我有这些错误,以及如何修复它们?

赋值是一个表达式。表达式后跟分号是表达式语句。在c++语言中,不能在类作用域中使用表达式语句。所有表达式语句必须在函数定义中。

删除structure[0] = 1;

您可以为structure提供默认的成员初始化器,就像您已经为isConv所做的那样。

class net{
public:
bool isConv = false;
int structure[2] {1, 0};   
};

请注意,如果您希望使用默认成员初始化器,则不能使用默认初始化,除非您提供了用户定义的构造函数。这样做:

net n{};
cout << n.structure;

在类中,您定义了所有的变量和函数,但您要做的是尝试在类中进行操作。您只能在函数内部进行操作,因此解决问题的最佳方法是在类的构造函数内部进行操作。构造函数是一个函数,其命名与类相同,并在初始化类时运行。

还有一些其他的问题,它们不一定会使你的代码不能工作,但是最好避免它们。

第一个是你认为公共和私有关键字,例如在Java中,你使一个函数或变量私有取决于他们前面的关键字。在c++类中,它们像"节"一样工作;函数/变量是公共的还是私有的,这取决于你在哪个部分定义它们。

另一个问题是你把所有东西都公开了,尽管这是不必要的。如果你想访问一个变量,无论是读取它还是修改它,你总是可以使用getter或setter。它们基本上是函数,要么返回变量(getter),要么修改变量(setter)。

如果你想让一个函数对类的用户可访问(public),你可以在public节中定义它。如果您希望它是私有的,并且只能由类本身使用,请在私有部分中定义它。

当你只打印structure数组时,你不打印数组的变量,而是它的内存地址,因为c++中的C风格数组只是指针。这也是为什么在c++中返回C风格数组时,返回类型必须是指针(所以在您的情况下是int*,而不仅仅是int)。如果你想打印所有的变量,创建一个for循环,循环遍历数组并打印变量。例如,如果您只想打印第一个元素,请调用getter函数并将[0]附加到它后面,就像处理普通数组一样。如果你还没有准备好学习指针,因为一开始学习它们可能相当粗糙,你可以看看向量。

代码的最后一个问题是using namespace std;行。在编写小程序或学习时,这不是什么大问题,但你应该在将来避免它。

而且,类名通常是大写的(至少从我的经验来看)。

我在代码中包含了一些注释,以便您可以更好地理解它。消除所有问题后的代码(除了using namespace std;问题,因为我不想让你太困惑)应该是这样的:
#include <iostream>
using namespace std;
class Net {                       // Capitalized class name
public:                           // Public section of the class, define your public functions here
Net() {                       // This is the constructor
this->structure[0] = 1;   // "this->" means we are referring to a variable belonging to the class
}
int* get_structure() {        // A getter for the structure array
return this->structure;   // Returning the array
}
private:                          // Private section of the class, define your variables and functions used only by the class here
bool isConv = false;
int structure[2];
};
int main() {
Net n;
int* structure = n.get_structure();   // Store n.structure in the structure variable (even though it is a pointer, you can use it as normal array)
cout << n.get_structure() << endl;    // Output: (a memory address)
cout << n.get_structure()[0] << endl; // Output: 1
cout << structure << endl;            // Output: (a memory address)
cout << structure[0] << endl;         // Output: 1
return 0;
}

不能给未声明的变量赋值。在这种情况下,你可以使用这样的构造函数

net(){    
structure[0] = 1;   
} 

或另一个答案的解

相关内容

  • 没有找到相关文章

最新更新