4

私はC++を初めて使用しますが、長時間見つめた後、これをコンパイルすることをやっと諦めました。コンパイラが何らかの理由でヘッダーファイルのコンストラクタプロトタイプを拒否しているようです...何が問題なのかわかりません。

Item.h:

#ifndef ITEM_H_
#define ITEM_H_


class Item {
public:
    Item(int); //This line is what Eclipse keeps flagging up with the error in the title
    virtual ~Item();
    Item* getNextPtr();
    int getValue();
    void setNextPtr(Item *);
};

#endif /* ITEM_H_ */

私のItem.cppファイルには次のものがあります。

int val;
Item* nextPtr = 0;
Item::Item(int value) {
    val = value;
}

Item* Item::getNextPtr() {
    return nextPtr;
}

void Item::setNextPtr(Item *nextItem) {
    nextPtr = nextItem;
} 

int Item::getValue() {
    return val;
}

Item::~Item() {
    // TODO Auto-generated destructor stub
} 

おっと、私はGCCを使用しています。そして、ええ、それらはメンバー変数でなければなりませんでした!この形式を使用してそれを行うにはどうすればよいですか?インスタンス化アイテムを使用するコードは次のとおりです。その中にもグローバル変数があってはならないことを私は知っています...

#include "LinkList.h"
#include "Item.h"

Item* first = 0;
int length = 0;

LinkList::LinkList(int values[], int size) {
    length = size;
    if (length > 0) {
        Item firstItem = new Item(values[0]);
        Item *prev = &firstItem;
        first = &firstItem;
        for (int i = 0; i < size; i++) {
            Item it = new Item(values[i]);
            prev->setNextPtr(&it);          //set 'next' pointer of previous item to current item
            prev = &it;                     // set the current item as the new previous item
        }

    }
}

LinkList::~LinkList() {
    for (int i = 0; i < length; i++) {
        Item firstItem = *first;
        Item *newFirst = firstItem.getNextPtr();
        delete(first);
        first = newFirst;
    }
}

int LinkList::pop() {
    Item firstItem = *first;
    first = firstItem.getNextPtr();
    return firstItem.getValue();
}

pop()およびデストラクタ関数の機能にバグがあることに気づきました...これらは無視してください。Itemのインスタンス化の何が問題になっているのかを把握したいだけです。

GCCエラー:

Info: Internal Builder is used for build
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\LinkList.o" "..\\src\\LinkList.cpp" 
..\src\LinkList.cpp: In constructor 'LinkList::LinkList(int*, int)':
..\src\LinkList.cpp:16:38: error: invalid conversion from 'Item*' to 'int' [-fpermissive]
..\src\/Item.h:14:2: error:   initializing argument 1 of 'Item::Item(int)' [-fpermissive]
..\src\LinkList.cpp:20:32: error: invalid conversion from 'Item*' to 'int' [-fpermissive]
..\src\/Item.h:14:2: error:   initializing argument 1 of 'Item::Item(int)' [-fpermissive]

21:24:26 Build Finished (took 256ms)
4

1 に答える 1

4

ここ:

Item firstItem = new Item(values[0]);

引数としてアイテムポインタを使用して新しいアイテムを作成しています。これは次と同じです:

Item firstItem(new Item(values[0]));

そしてそれは次のようになります:

Item *firstItem = new Item(values[0]);
于 2013-01-08T21:59:59.977 に答える