C ++错误:重新定义类

时间:2016-10-11 07:12:20

标签: c++ class compiler-errors g++

注意:我已经彻底搜索了SO,并且针对其他类似问题发布的解决方案在这里对我不起作用。

我正在编写自己的自定义字符串' C ++中的类,在编译时会遇到以下错误:

  

./ PyString.h:8:11:错误:' PyString'的外线声明不   不匹配' PyString'中的任何声明PyString :: PyString(char *);             ^

     

./ PyString.h:9:11:错误:隐式声明的析构函数PyString ::〜PyString(void)的定义;

     

pystring.cpp:4:7:错误:重新定义' PyString' class PyString {

对于第一个和第二个错误,在cpp文件中将析构函数移动到类定义本身不起作用。

至于第三个错误,我似乎无法修复它 - 我没有重新定义课程!

以下是pystring.h

#ifndef PYSTRING_INCLUDED
#define PYSTRING_INCLUDED

class PyString {
    char* string;
};

PyString::PyString (char*);
PyString::~PyString (void);

#endif

以下是pystring.cpp

#include "PyString.h"
#define NULL 0

class PyString {
    char* string = NULL;
  public:
    PyString(char inString) {
      string = new char[inString];
    };

    ~PyString(void) {
      delete string;
    };
};

作为参考,这里是编译输出的截图: Compiler output screenshot

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您在头文件和Cpp文件中定义了类PyString,而且,函数定义最后不需要;。 并且......您的函数原型需要在标题中的类声明中:

pystring.h

class PyString {
public: //ALWAYS indicate what is public/private/protected in your class
    PyString (char* inString);
    ~PyString (); // Don't put void when there's no parameter

private: // All attributes are private
    char* string;
};

pystring.cpp

#include "PyString.h"

PyString::PyString(char* inString) {
    string = inString; // Avoid using new unless you're forced to
}

PyString::~PyString() {
}

答案 1 :(得分:0)

哦,是的,你是! pystring.h包含

class PyString {
    char* string;
};

这是一个类声明。声明PyString::PyString (char*); 并且PyString::~PyString (void);需要在该声明中。

但是你在pystring.cpp中有类似的东西,指定其他功能,定义其中一些功能。这就是你的编译器告诉你的。

通常,你在标题中完全定义一个class(即所有成员,以及成员函数的声明),以及实现源文件中该类的成员函数。

这里故事的寓意:你无法通过反复试验来学习C ++。得到一本好书!