我正在尝试使用for (int i = 0; i < options.size(); i++)
遍历列表,其中options
是我需要遍历的列表。我得到的错误是
expression must have class type.
我已经尝试过(int) options.size()
在for循环中以及for循环之前的int length = options.size()
中,均无济于事。我究竟做错了什么???这是全部功能;列表options[]
被传递给具有三个项目的函数。
int getChoice(string options[], int low, int high) {
// Method variables:
bool legal; // True if input is valid, false otherwise
string valid; // List of valid inputs
string entry; // Temporary holder for user input
int input; // Return variable for user entry
// Assign values to variables:
legal = false;
valid = "0123456789";
// Print options, get/test user input:
while (cont) {
int length = options.size(); // didn't work
(int) options.size() >> length; // didn't work
for (int i = 0; i < options.size; i++) { // didn't work
cout << i << ". " << options[i] << endl;
}
}
}
我看不出任何可能导致错误的原因,所以我什至不知道从哪里开始修复它:(
答案 0 :(得分:4)
声明
string options[]
等同于
string* options
在函数参数中。
鉴于options.size()
是错误的,因为指针没有任何成员函数。
我可以想到以下克服这种障碍的方法。
将数组的大小作为参数传递给函数。
int getChoice(string options[], size_t size, int low, int high) {
并在函数中使用它。
使用std::vector<std::string>
代替指针。
int getChoice(std::vector<std::string> const& options, int low, int high) {
您可以使用range-options
循环轻松地遍历for
的内容。如果需要向量的大小,则可以使用options.size()
。
如果在编译时知道数组的大小,则也可以使用std::array<std::string, SIZE>
。
const int SIZE = 10; // Just an example.
...
int getChoice(std::array<std::string, SIZE> const& options, int low, int high) {
与std::vector
一样,您可以使用range-options
循环遍历for
的内容。如果需要大小,也可以使用SiZE
的形式。