-1

C++ の学習を開始しましたが、複数のファイルを操作するときに行き詰まりました。基本的なクラスを練習するために、3 つの異なるファイルを作成しました。

  • ワーキング.cpp
  • 単語.cpp
  • ワード.h

単語.cpp:

#include <iostream>
#include "word.h"
using namespace std;
class word{

public:
char *word;

void createWord(char *str)
{
    word = str;
}

void print_word(void)
{
    cout<<word<<endl;
}

char * getWord()
{
    return word;
}

}

ワーキング.cpp

#include <iostream>
#include "word.h"
void printWord(word);
using namespace std;
int main()
{
word one;
one.createWord("one");

printWord(one);

}

void printWord(word a)
{
cout<<a.getWord()<<endl;
}

ワード.h

class word;

これらは 3 つの異なるファイルであるため、それらをコンパイルする方法がわかりません。私が試したことは
g++ working.cpp word.cpp

ただし、コンパイラは単語をクラスとして認識せず、次のエラーが表示されます

working.cpp: In function 'int main()':
working.cpp:7:7: error: aggregate 'word one' has incomplete type and cannot be defined
working.cpp:7:12: error: aggregate 'word two' has incomplete type and cannot be defined
working.cpp:7:17: error: aggregate 'word three' has incomplete type and cannot be defined
working.cpp: In function 'void printWord(word)':
working.cpp:19:6: error: 'aha' has incomplete type
In file included from working.cpp:2:0:
word.h:2:7: error: forward declaration of 'class word'
word.cpp:25:1: error: expected ';' after class definition

コンパイル中に何が間違っていますか?

4

3 に答える 3

4
  1. wordヘッダー ファイルにの定義をさらに含める必要があります。このようなもの:

    class word
    {
    public:
        char *word;
        void createWord(char *str);
        void print_word(void);
        char * getWord();
    };
    
  2. 次に、word.cpp実装だけに変更します。

    void word::createWord(char *str)
    {
        word = str;
    }
    
    void word::print_word(void)
    {
        cout<<word<<endl;
    }
    
    char * word::getWord()
    {
        return word;
    }
    
  3. コンパイルしてリンク!

word他の翻訳単位がクラスの大きさを認識できるように (作成するインスタンスに十分なスペースを確保するため)、必要なメソッドの名前を認識できるように、ヘッダーにより多くのクラスを含める必要があります。電話。

于 2013-05-31T23:44:30.307 に答える
3

ヘッダー ファイルでクラス名を指定するだけ (いわゆる前方宣言) では十分ではありません。完全なクラス宣言 (クラスのすべてのフィールドと関数を宣言する) が必要です。

class word {
public:
    char *word;
    void createWord(char *str);
    void print_word(void);
    char * getWord();
};
于 2013-05-31T23:42:03.957 に答える
3

wordクラスの実際の宣言はありませんword.h

word.h:2:7: error: forward declaration of 'class word'

Bjarne Stroustrup のすばらしい本「The C++ Programming Language」を読んで始めることをお勧めします。

于 2013-05-31T23:42:47.993 に答える