使用 C++ 的 Array 中的非静态成员引用错误
Posted
技术标签:
【中文标题】使用 C++ 的 Array 中的非静态成员引用错误【英文标题】:A nonstatic member reference error in Array using c++ 【发布时间】:2019-05-02 07:55:57 【问题描述】:我是 C++ 编程的初学者,我现在正在学习所有关于类和对象的知识。为了练习,我创建了一个名为 Employee 的类,并在其中添加了一些成员。但我注意到记录数组给了我一个错误,指出非静态成员引用必须相对于特定对象。这只发生在我在 Employee 类中创建数组时。但是当我在构造函数Employee()
中调用它时,它并没有突出显示为错误,以及当我尝试将它初始化为全局变量,甚至是我的main.cpp 中的局部变量时(这是main()
位于)。请为此提供建议甚至更好的解决方案。
#pragma once
#include<string>
#include<iostream>
using namespace std;
class Employee
private:
int recordSize = 100;
int fieldSize = 4;
string record[recordSize][fieldSize];
public:
Employee();
~Employee();
;
main.cpp:
#include "Employee.h"
#include<string>
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
Employee::Employee()
ifstream inFile;
inFile.open("C:\\Users\\RJ\\Desktop\\employee-info.txt");
for (int index = 0; index < recordSize; index++)
for (int index2 = 0; index2 < fieldSize; index2++)
inFile >> record[recordSize][fieldSize];
Employee::~Employee()
我还包括employee-info.txt的内容
ID Firstname Lastname Sales
1 Bruno Mars 120000.00
2 Lebron James 150000.00
【问题讨论】:
using namespace std;
- 从不在头文件中。 – C:\\Users\\RJ\\Desktop\\employee-info.txt
– 内容?
string record[recordSize][fieldSize];
-- 这不是有效的 C++。如果您这样做,也会出现同样的错误:int main() int recordSize = 100; std::string record[recordSize];
, 那么您的数组是固定大小的,还是在运行时它们的大小会有所不同?答案取决于您的意图。
您需要阅读您最喜欢的 C++ 书籍中有关数组的更多信息。
你想用你的代码实现什么?字符串数组?
inFile >> record[recordSize][fieldSize];
应该是inFile >> record[index][index2];
【参考方案1】:
变量recordSize
和fieldSize
需要同时是static
和const
(或constexpr
)才能用作std::string record
二维数组的维度。
它们必须是const
,因为数组绑定应该是一个整数常量。
它们必须是static
,因为record
数组不允许对于Employee
类的不同实例具有不同的大小。
如果您希望 2D 数组能够在 Employee
类的不同实例中保存不同的大小,则应改为使用 std::vector
或 std::vector<std::string>
。
【讨论】:
这个回答了我的问题。很棒的信息和建议。我还需要多练习。任重而道远。 事实上,我总是建议先使用std::vector
首先,然后如果你发现有必要考虑更改为std::array
或原始数组.您当然想要一个 std::vector 记录;对于每个单独的记录,您可能更喜欢结构/类。【参考方案2】:
用于定义数组大小时,大小需要为constexpr
static constexpr int recordSize = 100;
static constexpr int fieldSize = 4;
string record[recordSize][fieldSize];
【讨论】:
以上是关于使用 C++ 的 Array 中的非静态成员引用错误的主要内容,如果未能解决你的问题,请参考以下文章