0

私はしばらくC++に触れていませんでしたが、クラス定義のどこに問題があるのか​​を誰かが指摘してくれることを期待していました。「エラー:「IPsource」はタイプに名前を付けていません」というエラーが表示され続けます。

class AddressPacket {
    std::string address;
    int packets;

    public:
    void initialize(std::string add) {
        address = add;
        packets = 1;
    }
    std::string getAddress() {
        return address;
    }
    int getPackets() {
        return packets;
    }
    bool checkAddress(std::string add) {
        return address == add;
    }
    void addPacket() {
        packets++;
    }
};

class AddressPacketList {
    AddressPacket masterList[100];
    int listCounter;

    public:
    AddressPacketList() { listCounter = 0; }
    void add(std::string add) {
        masterList[listCounter].initialize(add);
        listCounter++;
    }
};

そしてメインの中に私は...

AddressPacketList IPsource();
IPsource.add("Hello");
4

3 に答える 3

4

これは、あなたがそれが何を意味すると思うかを意味するものではありません。

AddressPacketList IPsource();

IPsourcetypeという名前のオブジェクトを宣言し、のデフォルトのコンストラクターAddressPacketListを使用して初期化すると思います。AddressPacketList

実際は、関数宣言です。パラメータを受け取らず、オブジェクトを値IPsourceで返すという名前の関数を宣言しています。AddressPacketList

この一見奇妙な結論は、いわゆる最も厄介な解析の結果です。

行を次のように変更するだけです。

AddressPacketList IPsource;
于 2012-11-15T16:15:13.563 に答える
1

さて、あなたは:と呼ばれる関数を宣言していIPSourceます。AddressPacketList

AddressPacketList IPsource(); // parsed as function declaration

次に、それをオブジェクトとして使用しようとします。宣言を次のように変更することで修正できます

AddressPacketList IPsource;
于 2012-11-15T16:15:22.737 に答える
0

これを試して:

AddressPacketList IPsource;

変数を宣言し、デフォルト以外のコンストラクターで初期化する場合にのみ、角かっこを使用できます。このようなコンストラクターがある場合:

AddressPacketList(std::string packet) { 
    masterList[0].initialize(packet);
    listCounter = 1; 
}

次に、次のようにローカル変数を宣言できます。

AddressPacketList IPsource("ABC");
于 2012-11-15T16:15:14.657 に答える