-1

我已经开始学习 C++,并且在处理多个文件时遇到了困难。为了练习基础课,我写了三个不同的文件,

  • 工作.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;

这是三个不同的文件,所以我不知道如何编译它们。我试过的是
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 的精彩著作《C++ 编程语言》以开始学习。

于 2013-05-31T23:42:47.993 回答