注意:我已经彻底搜索了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;
};
};
非常感谢任何帮助。
答案 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 ++。得到一本好书!