c++-error C2079 类的前置声明

问题描述

error C2079 类的前置声明

如下代码,可运行:
void A();

void test()
{
A();
}

void A() {};
但是我把void改成class时候却运行失败:
class A;

void test()
{
A a;
}

class A {};
当然如果用指针的话还是可以的,然而并没什么用,因为指针声明后就没有然后了。

解决方案

 class A;

void test();

class A
{
public:
    int x;
    A() {}
};

void test()
{
    A *a = new A();
    a->x = 1;
}

int main()
{
    test();
}

解决方案二:

因为指针声明后就没有然后了。
什么意思?为什么没用?

A *a = new A();
a->成员

解决方案三:

如果A a;的话 error C2079: “a”使用未定义的 class“A”
如果 A * a = new A;的话 error C2512: “A”: 没有合适的默认构造函数可用
即使我添加了构造函数

class A;
void test()
{
A * a = new A;
}
class A {
public:
A() {}
};

解决方案四:

你们两个不是冤家吗 居然被我碰到了

解决方案五:

指针定义后,需要 new,之后和非指针定义的变量是一样的。

时间: 2024-12-09 20:32:30

c++-error C2079 类的前置声明的相关文章

浅析C++中前置声明的应用与陷阱

以下是对C++中前置声明的应用与陷阱进行了详细的分析介绍,需要的朋友参考下   前置声明的使用有一定C++开发经验的朋友可能会遇到这样的场景:两个类A与B是强耦合关系,类A要引用B的对象,类B也要引用类A的对象.好的,不难,我的第一直觉让我写出这样的代码: 复制代码 代码如下: // A.h #include "B.h" class A { public:     A(void);     virtual ~A(void); }; //A.cpp #include "A.h&

C++中前置声明的应用与陷阱

以下是对C++中前置声明的应用与陷阱进行了详细的分析介绍,需要的朋友参考下   前置声明的使用有一定C++开发经验的朋友可能会遇到这样的场景:两个类A与B是强耦合关系,类A要引用B的对象,类B也要引用类A的对象.好的,不难,我的第一直觉让我写出这样的代码: 复制代码 代码如下: // A.h #include "B.h" class A { public:     A(void);     virtual ~A(void); }; //A.cpp #include "A.h&

c++类模板可以前置声明吗

问题描述 c++类模板可以前置声明吗 c++类模板可以前置声明吗?格式是什么样的?有不能前置声明的吗?在.h文件中前置声明,在.cpp中include 解决方案 无非就是 templete <typename 类型>class xxx{ ...;} 解决方案二: 引用 2楼http://blog.csdn.net/fuli1215/article/details/6320730 解决方案三: template class xxxx; 解决方案四: http://blog.csdn.net/fu

c++-求教C++中一个类模板的声明问题

问题描述 求教C++中一个类模板的声明问题 如图中框住的部分,求教详细说一下,这种声明方法叫什么,声明的格式是什么,这样声明的意义是什么,调用的格式是什么?小弟不胜感激. 新手一个,正在自学中,请各位大神不吝赐教,小弟拜谢! 解决方案 就是T类型的vector的函数 解决方案二: T类型 是你给Vector的定义时候需要的数据类型 例子: Vectorstd::string vec; 这个vec里面的就是std::string类型的 解决方案三: 如何声明一个类

ASP 三层架构 Error处理类_应用技巧

从这节开始,将会给大家介绍几个ASP中的三大通用类,它贯穿于我所设计的三层架构中,是对ASP语法的扩展,可以提高很多细节处理上的效率,可以算是一点点框架的味道. 本节介绍错误处理类,类名Con_Error,在代码页面之初就进行初始化,实例名为e,以下的e.add 即使用该错误类的实例化对象进行操作. 方法介绍: e.Add(ByVal vErrorMessage ) 记录一个错误,并且设置 e.Error = true . 在程序检测用户名合法性等地方发现错误时,就调用这个方法,记录一个错误信息

iOS 在类实现定义中声明成员变量的怪异方式

WebGL 规范(WebGL Specification) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 看看下面的用法,几年前系统地看过 Objective-C 2.0 的官方文档和那本老外

ASP 三层架构 Error处理类

从这节开始,将会给大家介绍几个ASP中的三大通用类,它贯穿于我所设计的三层架构中,是对ASP语法的扩展,可以提高很多细节处理上的效率,可以算是一点点框架的味道. 本节介绍错误处理类,类名Con_Error,在代码页面之初就进行初始化,实例名为e,以下的e.add 即使用该错误类的实例化对象进行操作. 方法介绍: e.Add(ByVal vErrorMessage ) 记录一个错误,并且设置 e.Error = true . 在程序检测用户名合法性等地方发现错误时,就调用这个方法,记录一个错误信息

路由模拟——类设计的声明部分

设计 一, 全局名空间路由模拟系统中所有全局变量与函数皆实现在一个名空间中. 名空间:NetSource名空间内变量: #define NULL 0 //网络设备类型表 enum NetElementType{FIBER=1,CENTRALROUT}; //路由IP地址长度 const int IP_ADDRESS_LENGTH=32; //路由表最大长度 const int MAX_ROUT_TABLE_SIZE=100; //路由器端口最大数据包容量 const int MAX_DATA_Q

【C++】C++友元

C++中可以使用friend关键字来将函数.类声明为某个类的友元 友元包括友元函数和友元类 友元具有一些特权,可以访问private的成员 友元只能授予,不能索取,单向,不能传递(比如a是b的友元,b是c的友元,但a不是c的友元) 友元函数 在类体中使用friend关键字对友元函数进行声明: 将非成员函数/一般函数声明为友元: friend void func(); //func为非成员函数,不属于任何类 将其他类的成员函数声明为友元: friend void CTime::getNum();/