-1

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 {



}
4

3 に答える 3

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;
}
于 2013-02-23T16:59:58.653 に答える
1

このコードを機能させるには:

List[i] = x;

あなたのクラス List は operator[] aka subscript operator を提供する必要があります:

class List {
public:
...
   Line &operator[]( int line );
...
};

これは一例です。const 参照または戻り値を返すことができ、const メソッドなどはプログラムによって異なります。

于 2013-02-23T17:00:57.037 に答える
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をサポートしていないと言われています。[ ]

于 2013-02-23T17:00:06.803 に答える