类模板相互引用的问题(错误:缺少类型说明符-假定为int。注意:C++不支持默认int)

问题描述:



现在有两个模板类(头文件A.h为1~14行,头文件B.h为15~27行):

  1: ///////////////////////////////////////////
  2: // file A.h
  3: //
  4: #include "B.h"
  5:
  6: template <class T>
  7: class A
  8: {
  9: public:
 10:     T a;
 11:     B b_ptr;
 12:     A(): a(0), b_ptr(NULL) {}
 13: };
 14:
 15: ///////////////////////////////////////////
 16: //file B.h
 17: //
 18: #include "A.h"
 19:
 20: template <class T>
 21: class B
 22: {
 23: public:
 24:     T b;
 25:     A a_ptr;
 26:     B(): b(0), b_ptr(NULL) {}
 27: };

此处编译会报如下错误:

error C4430:缺少类型说明符-假定为int。注意:C++不支持默认int

error C2143:语法错误:缺少“,”(在”<”的前面)


解决办法:

在A.h中对类B进行前向声明,在B.h中对类A进行前向声明,如下代码所示(代码7~8行和25~26行):

  1: ///////////////////////////////////////////
  2: // file A.h
  3: //
  4: #include "B.h"
  5:
  6: // forward statement
  7: template <class T>
  8: class B;
  9:
 10: template <class T>
 11: class A
 12: {
 13: public:
 14:     T a;
 15:     B b_ptr;
 16:     A(): a(0), b_ptr(NULL) {}
 17: };
 18:
 19: ///////////////////////////////////////////
 20: //file B.h
 21: //
 22: #include "A.h"
 23:
 24: // forward statement
 25: template <class T>
 26: class A;
 27:
 28: template <class T>
 29: class B
 30: {
 31: public:
 32:     T b;
 33:     A a_ptr;
 34:     B(): b(0), b_ptr(NULL) {}
 35: };

关键词:

前向声明, 模板类

E-mail:[email protected]

时间: 2024-10-05 05:07:52

类模板相互引用的问题(错误:缺少类型说明符-假定为int。注意:C++不支持默认int)的相关文章

error C4430: 缺少类型说明符 - 假定为 int

原文地址:error C4430: 缺少类型说明符 - 假定为 int.注意: C++ 不支持默认 int作者:tony c:evanworkspace11netwowkippack.h(50) : error C2146: 语法错误 : 缺少“;”(在标识符“nSourPort”的前面) c:evanworkspace11netwowkippack.h(50) : error C4430: 缺少类型说明符 - 假定为 int.注意: C++ 不支持默认 int c:evanworkspace1

error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

1 #include<iostream> 2 using namespace std; 3 4 5 extern int i; 6 extern float f(float a); 7 float b; 8 float f(float a){ 9 return a+1.0; 10 } 11 int i; 12 int h(int x) 13 { 14 return x*i; 15 } 16 17 main() 18 { 19 b=1.0; 20 i=2; 21 f(b); 22 h(i); 2

error C3646 和 error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

总结了一下,主要有以下原因: 1. (此情况经常出现在大型工程项目中)如果存在两个类的头文件a.h和b.h,在a.h中有这样的语句:#include "b.h",在b.h文件中有这样的语句:#include "a.h"   且在一个类中有另一个类的对象时   那么就会出现这样的错误. 2. 没有包含要定义的类的头文件. 3.项目中少加了宏定义,导致头文件重复定义或相应宏无法识别. 4.当有多个头文件时,顺序写反也可能导致相关的错误,其根本是头文件中的预编译语句被隐去

error C4430: 缺少类型说明符 - 假定为 int....的一种情况的解决方法

这段时间用VS2013写代码的时候,一不小心就出现了这个提示,这个问题困扰了我一段时间,不过总算解决了,这里记录一下! 我这里先描述本人碰到的问题: 正如上图所见,一段在我们眼里看起来没有任何错误的代码,居然爆出了4430的错误,先不急,我们先看一看DlgAddAccount.h文件中包含的头文件: 再看一看AddAccountInfoDlg.h中包含的头文件: 我们发现一件很有趣的事情,两个文件互相包含,这样的话,我们将AddAccountInfo.h中的#include "DlgAddAcc

WinPcap应用程序:error: C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int

在对WinPcap的文档进行学习时,直接复制了别人的代码,然后就是报错. 头疼不已,然后才发现C++的版本不一样,main函数前面必须加上数据类型,因此改为:int main(),一起就Ok了!! 原文地址:https://www.cnblogs.com/almn/p/11286978.html

利用delegate来解决类之间相互引用问题(引用死锁)

类之间相互引用--类A中需要调用类B中的方法,同时,类B中又要调用类A中的方法.(也被称为引用死锁,通常会出现编译错误). 解决方法是,在类A中引用类B,并使类A成为类B的delegate,这样在类A中就可以调用类B中的方法,而在类B中可以设一个delegate属性,(这个delegate其实就是类A)就可以用[delegate msg]的方式来调用类A中的方法了. 具体实现如下: ** classA.h : @interface ClassA<ClassBDelegate> { ClassB

类模板使用示例(五) 非类型类模板参数

Stack4.hpp的代码如下: #ifndef STACK4_HPP #define STACK4_HPP #include <iostream> #include <vector> #include <stdexcept> template <typename T, int MAXSIZE> class Stack { public: Stack(); void push(T const&); void pop(); T top() const;

VC++编译错误error C2065: “HANDLE”: 未声明的标识符及添加winbase.h后提示winbase.h(243): error C2146: 语法错误: 缺少“;”(在标识符“Internal”的前面)的解决办法

问题描述: VC++程序编译时提示错误:error C2065: "HANDLE": 未声明的标识符等众多错误提示,如下所示: error C2065: "HANDLE": 未声明的标识符 error C2146: 语法错误: 缺少";"(在标识符"hFind"的前面) error C2065: "hFind": 未声明的标识符 error C2065: "INVALID_HANDLE_VALUE

C++ Primer 学习笔记_81_模板与泛型编程 --类模板成员[续1]

模板与泛型编程 --类模板成员[续1] 二.非类型形参的模板实参 template <int hi,int wid> class Screen { public: Screen():screen(hi * wid,'#'), cursor(hi * wid),height(hi),width(wid) {} //.. private: std::string screen; std::string::size_type cursor; std::string::size_type height