下面是我的3个cpp文件和2个头文件。我收到了一个天文数字的错误,大多数都很不清楚。我是c ++的新手,拥有C#/ Java背景。
我明白以下可能是语法错误。感谢您的帮助。
Main.cpp的:
onResponse()
B.h:
#include <iostream>
#include "B.h"
#include "S.h"
using namespace std;
int main() {
B b;
S s("Jon");
return 0;
};
B.cpp:
#ifndef B_H
#define B_H
class B {
public:
B();
};
#endif
S.H:
#include <iostream>
#include <string>
#include "B.h"
#include "S.h"
using namespace std;
class B {
public:
B() {}
};
S.cpp:
#ifndef S_H
#define S_H
class S: public B {
public:
S(string name);
}
#endif
这是我的错误列表。这有点压倒性。
答案 0 :(得分:4)
类的(前向)声明是如下声明:
class X;
类的定义类似于:
class X
{
// stuff
};
这样的定义可能只对每个班级出现一次。
如果您不希望将数据成员作为公共接口的一部分,则可以
B.h
#indef B_H
#define B_H
#include <string> // to be used here, so we need to include it
// not "using namespace std;" here!! *
class B
{
public:
B();
void setValues();
std::string printValues() const; // don't miss that std::
private:
std::string s, result;
float f;
int i;
bool b;
};
#endif
B.cc
#include "B.h"
B::B()
: f(), i(), b() // **
{ }
void B::setValues() { }
std::string printValues() const
{
result = s + " " + std::to_string(i) + " " +
std::to_string(f) + " " + std::to_string(b);
return result;
}
S.H
#ifndef S_H
#define S_H
#include "B.h" // required to make B known here
#include <string> // known through B, but better safe than sorry
class S : public B
{
public:
S(std::string name);
std::string subPrint() const; // ***
};
#endif
S.cc。
#include "S.h"
S::S(std::string name)
: s{name} // **
{ }
std::string subPrint () const // ***
{
return printValues() + s;
}
*:Why is “using namespace std” in C++ considered bad practice?
**:C++, What does the colon after a constructor mean?
***:Meaning of “const” last in a C++ method declaration?
您的B.h
不包含但使用string
我怀疑是std::string
。
答案 1 :(得分:1)
嗯,你的代码中有很多错误。我的建议是逐一减少这些错误,并查看被确定为罪魁祸首的行。
我还建议您查看如何声明一个类以及如何定义它的成员。例如,B.h和B.cpp都定义了一个B类,但是以不同的方式这样做。然后S.h重新定义了B类。
您的代码太破碎了,我们无法一块一块地修复它。在查看了令您困惑的C ++区域之后,您需要重新启动,例如声明和定义类及其成员。 Wikipedia has a good introduction。请记住,当定义与声明分开时,您不能再次使用class S { ... }
,而是使用S::member
格式来介绍定义。