C++无效使用不完整的类型
C++ invalid use of incomplete type
我有以下文件:main.cpp,class.cpp,class.hpp,student.cpp,student.hpp
以下是代码:
主.cpp:
#include <iostream>
#include <vector>
#include <string>
#include "class.hpp"
using namespace std;
int main(){
vector<Student> students;
vector<Class> classes;
Class B4( 4, 'B' );
classes.push_back( B4 );
Student john( "John", "Boss", B4 );
students.push_back( john );
Student marc( "Marc", "Solo", B4 );
students.push_back( marc );
marc.printInfo();
B4.addStudent( marc );
return 0;
}
类.hpp:
#include <vector>
#include "student.hpp"
using namespace std;
class Class{
private:
int number;
char letter;
vector<Student> students;
public:
Class( int, char );
void addStudent( Student & );
void printClass();
};
类.cpp:
#include <iostream>
#include "class.hpp"
Class::Class( int number, char letter ){
this -> number = number;
this -> letter = letter;
}
void Class::printClass(){
cout << this -> number << "." << this -> letter << endl;
}
void Class::addStudent( Student & student ){
this -> students . push_back( student );
}
学生.hpp:
#include <string>
using namespace std;
class Class;
class Student{
private:
string name;
string surname;
Class* classStudent;
public:
Student( string name, string surname, Class & );
void printInfo();
};
学生.cpp:
#include <iostream>
#include "student.hpp"
using namespace std;
Student::Student( string name, string surname, Class & classStudent ){
this -> name = name;
this -> surname = surname;
this -> classStudent = &classStudent;
}
// printInfo
void Student::printInfo(){
cout << "Name: " << this -> name << "nSurname: " << this -> surname <<
"nClass:" << this -> classStudent -> printClass() << endl;
}
当我编译这些文件时,我收到以下错误:
student.cpp: In member function ‘void Student::printInfo()’:
student.cpp:15:41: error: invalid use of incomplete type ‘class Class’
"nClass:" << this -> classStudent -> printClass() << endl;
^
In file included from student.cpp:2:0:
student.hpp:5:7: error: forward declaration of ‘class Class’
class Class;
^
我从来没有遇到过这样的情况:我需要在二等舱中使用头等舱,在头等舱使用二等舱。
添加
#include "class.hpp"
后
#include <iostream>
#include "student.hpp"
在student.cpp
,否则编译器将不知道Class
是什么。
相关文章:
- 字符类型转换不兼容
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 为什么"fun(i)"被推导出为"fun<int&>"而不是"fun<int>",因为"i"是"int"的类型而不是参考?
- 创建模板类型而不新建/删除
- 成员引用基类型 'char' 不是 C++ 中的结构或联合
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 何时使用表达式的类型(而不是类别)?
- 表达式必须具有类类型。不知道怎么解决
- 不同c++编译器之间的自动类型推导不匹配
- 调用的对象类型 'double' 不是 report() 函数的函数或函数指针
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 在 lambda 中从引用类型捕获的值的类型,不使用通用捕获
- 使用 AWS c++ 接口将文件上传到 s3 时内容类型标签不正确
- 有没有办法通过插入新类型名称而不是 int 来使用 2 位大小类型而不是 int?
- 模板参数列表中参数 3 处的类型/值不匹配
- 为什么函数返回类型中不允许参数推导?
- 有没有办法用不变语法获得当前的类类型?
- 标准容器模板可以用不完整类型实例化吗?