1. ホーム
  2. c++

[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?

2022-01-21 11:37:47

質問

C++で2つのクラスを以下のコマンドでコンパイルしようとしています。

g++ Cat.cpp Cat_main.cpp -o Cat

しかし、以下のようなエラーが表示されます。

Cat.cpp:10:10: error: variable ‘Cat Joey’ has initializer but incomplete type

どなたか、この意味を説明していただけませんか?私のファイルが基本的に行っていることは、クラス( Cat.cpp ) を作成し、インスタンスを作成します ( Cat_main.cpp ). 以下は私のソースコードです。

Cat.cpp。

#include <iostream>
#include <string>

class Cat;

using namespace std;

int main()
{
    Cat Joey("Joey");
    Joey.Meow();

    return 0;
}

Cat_main.cpp:

#include <iostream>
#include <string>

using namespace std;

class Cat
{
    public:
        Cat(string str);
    // Variables
        string name;
    // Functions
        void Meow();
};

Cat::Cat(string str)
{
    this->name = str;
}

void Cat::Meow()
{
    cout << "Meow!" << endl;
    return;
}

解決方法は?

完全な型が必要な場合は、前方宣言を使用します。

クラスを使用するには、そのクラスの完全な定義が必要です。

というのが通常の方法です。

1) ファイルを作成する Cat_main.h

2) 移動

#include <string>

class Cat
{
    public:
        Cat(std::string str);
    // Variables
        std::string name;
    // Functions
        void Meow();
};

から Cat_main.h . ヘッダーの中で using namespace std; で文字列を修飾し std::string .

3) このファイルを Cat_main.cppCat.cpp :

#include "Cat_main.h"