0

main.cpp:

#include <iostream>
#include "pokemonList.h"
void pokemonLookup();

int main() {
    pokemonLookup();
    return 0;
}

void pokemonLookup() {
    pokemonList pL;
    std::cout<<std::endl<<"What Pokemon do you want to look up? ";
    std::string pokemonLookup;
    std::cin>>pokemonLookup;
    pL.displayPokemon(pokemonLookup);
}

pokemonList.h:

#ifndef POKEMONLIST_H
#define POKEMONLIST_H
#include <iostream>

class pokemonList
{
    private:
        struct pokemonTemplate {
            std::string pokemonName;
            std::string pokemonMoves[3];
            int pokemonLevel;
            int baseATK;
            int baseDEF;
            int baseSPATK;
            int baseSPDEF;
            int baseSPEED;
            };
        pokemonTemplate bulbasaur;
        pokemonTemplate pikachu;
    public:
        void displayPokemon(std::string pokemon);
    protected:
};

#endif // POKEMONLIST_H

pokemonList.cpp:

#include "pokemonList.h"
/*
pokemonTemplate* bulbasaur() {
    bulbasaur.pokemonName = "Bulbasaur";
    bulbasaur.pokemonMoves[3];
    bulbasaur.pokemonLevel = 5;
    bulbasaur.baseATK = 10;
    bulbasaur.baseDEF = 10;
    bulbasaur.baseSPATK = 10;
    bulbasaur.baseSPDEF = 10;
    bulbasaur.baseSPEED = 10;
}

pokemonTemplate* pikachu() {
    pikachu.pokemonName = "Pikachu";
    pikachu.pokemonMoves[3];
    pikachu.pokemonLevel = 5;
    pikachu.baseATK = 8;
    pikachu.baseDEF = 10;
    pikachu.baseSPATK = 12;
    pikachu.baseSPDEF = 6;
    pikachu.baseSPEED = 15;
}
*/
void displayPokemon(std::string pokemon) {
    std::cout<<std::endl<<"Looking up: " + pokemon<<std::endl;
}

私は pokemonList.cpp ファイルでコメントアウトされた悪いコードがたくさんあることに気付きました。それはこの質問の目的ではありません。コンパイルしようとすると、main.cpp に次のようなエラーが 1 つ表示されます。

D:/CodeBlocks/Projects/RelearningCPlusPlus/main.cpp:15: undefined reference to `pokemonList::displayPokemon(std::string)'
4

5 に答える 5

6

関数displayPokemon()を定義しましたが、メンバー関数として定義されていません。クラス定義の外でメンバー関数として定義するには、クラス名を指定する必要があります。

void pokemonList::displayPokemon(std::string pokemon) {
    std::cout<<std::endl<<"Looking up: " + pokemon<<std::endl;
}
于 2013-09-01T02:35:22.390 に答える
2

そのはず

void pokemonList::displayPokemon(std::string pokemon){....
于 2013-09-01T02:35:59.177 に答える
1

これを変更する必要があります:

void displayPokemon(std::string pokemon) {

これに:

void pokemonList::displayPokemon(std::string pokemon) {
于 2013-09-01T02:35:45.310 に答える
0

ディートマーの答えは問題を解決します。

std::string pokemonただし、この場合、値渡しではなく参照渡しで引数を渡す方が良いことを付け加えたいと思います。これにより、オーバーヘッドが削減されます。したがって、displayPokemon関数は次のようになります。

void pokemonList:displayPokemon(std::string &pokemon) const {
    std::cout<<std::endl<<"Looking up: " + pokemon<<std::endl;
};

また、対応するメンバー関数の宣言を変更することを忘れないでください。

于 2013-09-01T02:55:30.557 に答える