我正在尝试使用 class 创建一个已指定最大大小的数组,但似乎没有创建该数组
I am trying to create an array with an already specificed maximum size using a class but the array does not seem to be created
我正在尝试在我的 UnsortedList class 中创建一个数组。我指定在头文件中创建一个数组,我还指定了 MAX_SIZE,它等于 10。但是,每当我创建 class 的对象时,默认构造函数不会创建它数组 MAX_SIZE。我不确定我做错了什么。我还收到一条错误消息,提示“变量 'myList' 周围的堆栈已损坏”。另外,作为旁注,我可以在调用默认构造函数时初始化数组值,而不是创建一个函数来完成它吗?
"UnsortedList.h" 头文件:
#pragma once
class UnsortedList {
public:
UnsortedList();
bool IsFull(); //Determines whether the list is full or not (returns T or F)
int GetLength(); //Gets the length of the list
void SetListValues();
private:
int length;
const int MAX_ITEMS = 10;
int numbers[];
};
"UnsortedList.cpp" 文件:
#pragma once
#include "UnsortedList.h"
#include <fstream>
#include <iostream>
using namespace std;
UnsortedList::UnsortedList() {
length = 0; //sets length to 0
numbers[MAX_ITEMS]; //sets array maximum size to MAX_ITEMS (10 as indicated in UnsortedList.h)
}
bool UnsortedList::IsFull() {
return (length == MAX_ITEMS);
}
int UnsortedList::GetLength() {
return length;
}
void UnsortedList::SetListValues() {
ifstream inFile;
inFile.open("values.txt");
int x = 0;
while (!inFile.eof()) {
inFile >> numbers[x];
x++;
}
}
"main.cpp" 文件:
#include <iostream>
#include <string>
#include "UnsortedList.h"
using namespace std;
int main() {
UnsortedList myList;
myList.SetListValues();
return 0;
}
我建议您使用 std::array
或 std::vector
,但是如果您必须使用 C 数组,那么您在 header 中的定义需要更正:
class UnsortedList {
// ...
const static int MAX_ITEMS = 10;
int numbers[MAX_ITEMS];
};
您可以删除构造函数中的相应行。文件读取方法也需要更正:
void UnsortedList::SetListValues() {
ifstream inFile;
inFile.open("values.txt");
int x = 0;
int read_value;
// x < MAX_ITEMS to avoid out of bounds access
while (x != MAX_ITEMS && inFile >> read_value)
{
numbers[x++] = read_value;
length++; // I assume you also want to increment the length at this point?
}
}
编辑:正如@πìνταῥεῖ 所指出的,当标准提供 std::array
时,没有充分的理由使用 C 样式数组。变化不大,声明为:
std::array<int, MAX_ITEMS> numbers;
您可以像使用 C 数组一样使用 operator[]
。这是更可取的,因为它提供了更丰富的 API 并且可以像其他 C++ 容器一样使用,即与 STL 算法一起使用。
我正在尝试在我的 UnsortedList class 中创建一个数组。我指定在头文件中创建一个数组,我还指定了 MAX_SIZE,它等于 10。但是,每当我创建 class 的对象时,默认构造函数不会创建它数组 MAX_SIZE。我不确定我做错了什么。我还收到一条错误消息,提示“变量 'myList' 周围的堆栈已损坏”。另外,作为旁注,我可以在调用默认构造函数时初始化数组值,而不是创建一个函数来完成它吗?
"UnsortedList.h" 头文件:
#pragma once
class UnsortedList {
public:
UnsortedList();
bool IsFull(); //Determines whether the list is full or not (returns T or F)
int GetLength(); //Gets the length of the list
void SetListValues();
private:
int length;
const int MAX_ITEMS = 10;
int numbers[];
};
"UnsortedList.cpp" 文件:
#pragma once
#include "UnsortedList.h"
#include <fstream>
#include <iostream>
using namespace std;
UnsortedList::UnsortedList() {
length = 0; //sets length to 0
numbers[MAX_ITEMS]; //sets array maximum size to MAX_ITEMS (10 as indicated in UnsortedList.h)
}
bool UnsortedList::IsFull() {
return (length == MAX_ITEMS);
}
int UnsortedList::GetLength() {
return length;
}
void UnsortedList::SetListValues() {
ifstream inFile;
inFile.open("values.txt");
int x = 0;
while (!inFile.eof()) {
inFile >> numbers[x];
x++;
}
}
"main.cpp" 文件:
#include <iostream>
#include <string>
#include "UnsortedList.h"
using namespace std;
int main() {
UnsortedList myList;
myList.SetListValues();
return 0;
}
我建议您使用 std::array
或 std::vector
,但是如果您必须使用 C 数组,那么您在 header 中的定义需要更正:
class UnsortedList {
// ...
const static int MAX_ITEMS = 10;
int numbers[MAX_ITEMS];
};
您可以删除构造函数中的相应行。文件读取方法也需要更正:
void UnsortedList::SetListValues() {
ifstream inFile;
inFile.open("values.txt");
int x = 0;
int read_value;
// x < MAX_ITEMS to avoid out of bounds access
while (x != MAX_ITEMS && inFile >> read_value)
{
numbers[x++] = read_value;
length++; // I assume you also want to increment the length at this point?
}
}
编辑:正如@πìνταῥεῖ 所指出的,当标准提供 std::array
时,没有充分的理由使用 C 样式数组。变化不大,声明为:
std::array<int, MAX_ITEMS> numbers;
您可以像使用 C 数组一样使用 operator[]
。这是更可取的,因为它提供了更丰富的 API 并且可以像其他 C++ 容器一样使用,即与 STL 算法一起使用。