第23行是:
List[i] = x;
当我尝试编译时:
g++ w3.cpp list.cpp line.cpp
list.cpp: In member function void List::set(int):
list.cpp:23:8: error: expected unqualified-id before [ token
这是main.cpp:
#include <iostream>
using namespace std;
#include "list.h"
int main() {
int no;
List list;
cout << "List Processor\n==============" << endl;
cout << "Enter number of items : ";
cin >> no;
list.set(no);
list.display();
}
这是list.h:
#include "line.h"
#define MAX_LINES 10
using namespace std;
struct List{
private:
struct Line line[MAX_LINES];
public:
void set(int no);
void display() const;
};
这是line.h:
#define MAX_CHARS 10
struct Line {
private:
int num;
char numOfItem[MAX_CHARS + 1]; // the one is null byte
public:
bool set(int n, const char* str);
void display() const;
};
这是list.cpp
#include <iostream>
#include <cstring>
using namespace std;
#include "list.h"
//#include "line.h" - commented this line because it was giving me a struct redefinition error
void List::set(int no) {
int line;
char input[20];
if (no > MAX_LINES)
no = MAX_LINES;
for (int i = 0; i < no; i++) {
Line x;
cout << "Enter line number : ";
cin >> line;
cout << "Enter line string : ";
cin >> input;
if (x.set(line, input)){
List[i] = x;
cout << "Accepted" << endl;
}
else
cout << "Rejected" << endl;
}
}
void List::display() const {
}
答案 0 :(得分:2)
List
是类型名称而不是成员。你可能意味着
this->line[i] = x;
您必须在this->
前加上前缀,因为line
单独含糊不清,因为您还有
int line;
以上几行(没有双关语)。
为避免命名冲突和使用this->
,您可以重命名变量,例如
struct List{
private:
struct Line lines[MAX_LINES];
...
};
void List::set(int no) {
int lineno;
...
}
然后您可以在不使用this->
或任何其他前缀
if (x.set(lineno, input)){
lines[i] = x;
cout << "Accepted" << endl;
}
答案 1 :(得分:1)
让我们理解错误信息:
list.cpp: In member function 'void List::set(int)':
list.cpp:23:8: error: expected unqualified-id before '[' token
list.cpp第23行在这里:
List[i] = x;
投诉是:
expected [something] before '[' token
您被告知您设计的List
对象不支持[ ]
语法。
答案 2 :(得分:1)
要使此代码有效:
List[i] = x;
你的班级列表提供operator [] aka下标操作符:
class List {
public:
...
Line &operator[]( int line );
...
};
这是一个例子,它可以返回const引用或返回值,是一个const方法等取决于你的程序。