无法从成员函数引用数据成员

时间:2013-02-23 16:54:02

标签: c++

第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 {



}

3 个答案:

答案 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方法等取决于你的程序。