- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我继承自模板类。当我进入教师类(class)时,我想进入学科类(class),反之亦然。我收到错误 Invalid use of incomplete type struct Subect;
void addSubject(Subject *s) {
this->addReference(s);
s->addReference(this); when I comment this line the it compiles without errors, but I cannot insert into Subject
}
我的全部代码在下面
#include <iostream>
#include <stdlib.h>
#include <vector>
using namespace std;
class Subject;
template <class T>
class abstractReference {
vector<T*> list;
public:
string code;
void addReference( T*);
void delReference( T*);
bool hasReference( T*);
T * getReference(int );
};
template <class T>
void abstractReference<T>::addReference(T* ref) {
list.push_back(ref);
//ref->addReference(this);
}
template <class T>
void abstractReference<T>::delReference(T* ref) {
int i;
for (i=0; i<list.size(); i++) {
if (list[i]== ref) list.erase(i);
}
}
template <class T>
bool abstractReference<T>::hasReference( T* ref) {
if (list.size() == 0) return false;
int i;
for (i=0; i<list.size(); i++) {
if (list[i] == ref) return true;
}
return false;
}
template <class T>
T* abstractReference<T>::getReference(int i) {
if (i < 0 || i > list.size()) return NULL;
return list[i];
}
class Teacher : public abstractReference<Subject> {
string fname;
string lname;
float sal;
public:
Teacher(string c, string fn, string ln, float s): fname(fn), lname(ln), sal(s) {
}
Teacher() {sal =0; fname=""; lname="";}
void setInfo(string c, string fn, string ln, float s=0.00) {
code=c;
fname = fn;
lname = ln;
sal = s;
}
string getName() {
return fname + " " + lname;
}
float getSal() {
return sal;
}
void addSubject(Subject *s) {
this->addReference(s);
s->addReference(this);
}
void delSubject(Subject *s) {
}
};
class Subject : public abstractReference<Teacher> {
string title;
public:
Subject(string c=NULL, string t=NULL) {
title = t;
}
string getTitle() {
return title;
}
};
main() {
Teacher *t;
t = new Teacher("J109", "Dexter", "McConnell",15000);
Subject *s, *s1, *s2;
s= new Subject("E001", "English");
s1= new Subject("M001", "Maths");
s2= new Subject("s001", "Science");
t->addSubject(s);
t->addSubject(s1);
cout << "Has Reference " << t->hasReference(s2) << endl;
cout << "Done..." << endl;
cout << t->getReference(1)->getTitle() << endl;
}
最佳答案
问题是编译器不理解类型Subject
,你可能前向声明它或者忘记包含定义它的头文件。
结果是,对于编译器来说,Subject
是一个不完整类型,它无法执行任何需要了解 Subject
布局的操作,调用它的成员函数就是这样一个例子。
解决方法是:
您应该在源 cpp 文件中包含定义 Subject
的头文件,您在其中定义了以下内容:
void addSubject(Subject *s)
如果您没有多个文件,请确保类 Subject
已定义之前 您已定义函数 addSubject()
.
关于c++ - 错误 : Invalid use of incomplete type struct Subject; error: forward declaration of struct Subject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275436/
import numpy as np from matplotlib import pyplot as plt import scipy.io.wavfile as wav from numpy.li
我正在尝试编译以下内容(在 MSVC 中): #define TRAP (errorCode = (errorCode != 0) ? errorCode :) int someFunction(
下面的代码究竟是如何工作的? #include template T x = T{}; void foo() { class Test { public: T
我不知道如何解释为什么创建成员有效 inner在类模板中 OuterTempl而在未模板类中这样做是非法的 Outer . // Non-template version struct Outer {
我正在查看 tensorflow 日志并发现以下行: 4 ops no flops stats due to incomplete shapes. Consider passing run_meta
我正在尝试使用Visual Studio 2019的内置编译器读取C++中的文件。在发现一些示例之后,我尝试这样做: #include using namespace std; int main()
我是一个相对较新的 C 程序员,所以请容忍我的无知:-)我正在尝试为 valgrind 编译提供一个自定义工具。该工具最初是大约 8 年前编写的,基于更旧版本的 valgrind。原始版本的 valg
我正在 recv while 循环中将一些数据读入缓冲区。 缓冲区前面有内容,我需要查看这些内容并获取剩余的字节。因此,我使用指针在缓冲区中导航以获取所需的字符,以便将剩余字节复制到另一个缓冲区中。
在下面的代码中,我想使用默认构造函数{.data = value},因为我希望我的类是POD。我不明白我在编译时收到的错误消息(llvm 或 gnu,c++11): #include class a
我有一个类应该有同一个类的私有(private)成员,例如: class A { private: A member; } 但它告诉我 member 是不完整的类型。为什么?如
Get-Process s* | where {s$_.Path} | dir | sort LastWriteTime | Format-Table fullname
我正在使用 RStudio,并尝试在我当前的项目中使用 packrat。我单击“在此项目中使用 packrat”复选框并按“确定”,我从控制台获得以下输出: > packrat::init()
我想使用 API 检索所有未删除且不完整的订单的列表。即类似于您可以在 Bigcommerce 管理页面上查看的订单列表。我知道我可以将 is_deleted 标志设置为 false 来过滤这些,但我
这个问题和看到的类似here . 我有大量大型 CSV,我正在通过函数连续加载和解析它们。其中许多 CSV 没有问题,但是当我尝试使用 read.csv() 加载它们时,有几个会导致问题。 我已将其中
我正在尝试将库移植到 Mac OS X。编译器报告了不完整的类型错误。具体来说:字段的类型不完整'header_t []。但是,当我查看源代码时,header_t 是在 packet_state_t
如果我有定义: typedef struct y_t *Y; 和 typedef struct x_t *X; struct x_t { Y *b; Y a; int s
这个问题已经有答案了: C programming decoupling interface from implementation with struct forward declaration (
当我尝试在 java 应用程序中执行密码查询时,遇到了一个奇怪的问题。result.dumpToString()- 方法向我显示了正确的结果。但是当我尝试迭代时,最后一个节点总是丢失(对于每个执行的查
我不确定为什么会收到此错误...“错误:字段‘config’的类型不完整”。我尝试做前向声明并使用#include 包含 header ...我只是想在 fInstance 中包含 fConfig..
我尝试的一切都给我 Incomplete(Size(1))。我现在最好的猜测是: named!(my_u64(&str) -> u64, map_res!(recognize!(nom::di
我是一名优秀的程序员,十分优秀!