Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;错误:类的重新定义_C++_Class_Compiler Errors_G++ - Fatal编程技术网

C++ C++;错误:类的重新定义

C++ C++;错误:类的重新定义,c++,class,compiler-errors,g++,C++,Class,Compiler Errors,G++,注意:我已经彻底搜索了SO,针对其他类似问题发布的解决方案在这里对我无效 我在C++中编写自己的自定义“string类”类,编译时,我遇到以下错误: ./PyString.h:8:11:错误:“PyString”的声明行外 不匹配“PyString”PyString::PyString(char*)中的任何声明; ^ ./PyString.h:9:11:错误:隐式声明的析构函数PyString的定义::~PyString(void) pystring.cpp:4:7:错误:“pystring”类

注意:我已经彻底搜索了SO,针对其他类似问题发布的解决方案在这里对我无效

<>我在C++中编写自己的自定义“string类”类,编译时,我遇到以下错误:

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

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

pystring.cpp:4:7:错误:“pystring”类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;
    };
};
以下是编译输出的屏幕截图供参考:


非常感谢您的帮助。

哦,是的!pystring.h包含

class PyString {
    char* string;
};
这是一个类声明。声明
PyString::PyString(char*);
PyString::~PyString(void);
需要在该声明中

但是在
pystring.cpp
中也有类似的内容,指定了附加函数,并定义了其中的一些函数。这就是编译器告诉您的

通常,您可以在头中完全定义一个
(即所有成员和成员函数的声明),并在源文件中实现该类的成员函数


<> P>这个故事的寓意:你不能真正通过试验和错误来学习C++。得到一本好书!

你在你的头和CPP文件中定义你的类PySnand,而且函数定义不需要<代码>;结束。 并且…您的函数原型需要位于标题中的类声明中:

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() {
}

我认为您应该重新开始,因为您显示的源代码中没有多少内容是正确的。请查找头中定义的类的任何示例,其成员在
.cpp
文件中定义。它也是一个类定义。这就是问题所在!至少,标题中报告的问题。对于完全声明,您的意思是完全定义(类,而不是成员。)
PyString::
不应出现在类定义中(这是一个错误,但某些编译器允许它通过)。还有您对“PyString.c”的建议是完全错误的该死,我今天犯了很多错误…谢谢我把这两个片段都复制到了单独的文件中,但is说
PyString::PyString
是一个额外的限定。此外,它仍然说有一个重新声明。它不会再出现了,idk为什么人们在这次编辑之前高估了我的错误答案…@Treycos:我是我正准备启动我的IDE,看看你之前的答案是否得到了编译,这完全是一种困惑;-)我的投票是一种高兴的表现,因为我确信我仍然可以做到这一点。