精华内容
下载资源
问答
  • 一个工程调用其他成员变量非常简单。 如: 定义 Test1.h申明成员变量 class A { public: double m_fTest; }; Test1.cpp改变成员变量的值。 m_fTest = 265.78; 然后再B中调用A的成员变量m_fTest,并...

    一句两句话已经不能表达现在的激动情绪了,唯有感叹知识的博大精深,并把感叹转变为文字。

    同一个工程调用其他类成员变量非常简单:

    如:

    Test1.h中申明成员变量

    class A
    {
    public:
    	double m_fTest;
    };
    

    Test1.cpp中改变成员变量的值。

    m_fTest = 265.78;

     

    然后再类B中调用类A的成员变量m_fTest,并需要类A中改变该值时,类B中也要随之改变:

    调用方法:包涵类A的头文件

    #include “test1.h”

    然后在调用处声明类A的对象:

    A  *a;

    通过类A的对象来调用成员变量即可:

    a->m_fTest;

    跨工程中调用:

    这就不能再像上面那样调用了,虽然也能调用到,但值不会随之改变,只能调用到初始化值。

    这就需要通过虚函数进行调用:

    在工程1中:

    Test1.h中:

    class A
    {
    public:
    virtual void update();
    virtual void onSimulationSlider(int n){};
    };
    

    并在虚函数中调用工程2中的虚函数updateSimulation

     

    Test2.h中:重写虚函数onSimulationSlider并在该虚函数中调用工程2中的虚函数updateSimulation

    #include “Test1.h”
    class B
    {
    public:
    	double m_fTest;
    void onSimulationSlider(int n){};
    };
    

    在工程2中:

    Test3中调用工程1的Test1.h中的类A的虚函数:

    #include “Test1.h”
    
    A *mTest;
    
    mTest ->onSimulationSlider(n);

    然后在工程1中的虚函数onSimulationSlider中操纵想要调用的成员变量。

    如果在工程2中的Test4中的类想通过Test3中的类调用该成员变量,可以通过消息。

    例如:Test4是一个界面类,界面上有一个slider控件,点击slider后,想让工程1中Test1中的成员变量m_fTest的值随slider的值变化而变化。

    则Test3中的虚函数updateSimulation中需要调用在Test4中的虚函数update(重写Test1中的虚函数update)

    Test4.h中:

    声明信号和槽函数:

    signals:
    
             voidhorizontalSlider( int );
    
    public slots:
    
                       voidonhorizontalSlider(int);

    在Test4.cpp中:

    重写Test1中的虚函数updata,并将slider的信号放在虚函数中

    bool SimulationHardwareGUI::update()
    {
    	QObject::connect(ui.m_Slider,SIGNAL(valueChanged(int)),this,SLOT(onhorizontalSlider(int)));
    	this->repaint();
    	return true;
    }
    

     

    定义槽函数onhorizontalSlider,并在槽函数中调用信号函数

     

    void SimulationHardwareGUI::onhorizontalSlider(int n)
    {
    	QSlider *ChangeSlider = qobject_cast<QSlider *>(sender());
    	if(ChangeSlider != NULL)
    	{
    		horizontalSlider( n );
    	}
    }
    

     

    在Test3中调用Test4的信号函数:

     

    connect((QObject*)(m_SimulationHardware), SIGNAL(horizontalSlider(int )), this, SLOT(onSimulationSlider(int)));

    并定义槽函数onSimulationSlider,在槽函数中调用Test1中的虚函数onSimulationSlider。

    如此循环调用即能实现不同工程的成员变量互调。

    值得注意的是在槽函数和信号函数的参数只能是类型,不能定义变量。

     

    展开全文
  • 2018年3月30日09:09:26 1. 解决方案管理器窗口,右键单击需要使用其他工程工程,进入添加,...3. 如果不能访问,请检查你所要访问的另一个工程有没有public声明 4. 不需要using指令即可完成访问...

    2018年3月30日09:09:26


    1. 在解决方案管理器窗口中,右键单击需要使用其他工程的工程,进入添加,选择添加引用,添加解决方案下的想要引用的工程

    2. 添加完成后即可实现访问

    3. 如果不能访问,请检查你所要访问的另一个工程的类有没有public声明

    4. 不需要using指令即可完成访问

    展开全文
  •  下面的例子里,我们DLL定义了point和circle两个类,并应用工程中引用了它们(单击此处下载本工程附件 )。//文件名:point.h,point声明#ifndef POINT_H#define POINT_H#ifdef DLL_FILEclass _declspec...

    DLL中定义的类可以在应用工程中使用。

      下面的例子里,我们在DLL中定义了point和circle两个类,并在应用工程中引用了它们(单击此处下载本工程附件 )。

    //文件名:point.h,point类的声明

    #ifndef POINT_H

    #define POINT_H

    #ifdef DLL_FILE

    class _declspec(dllexport) point //导出类point

    #else

    class _declspec(dllimport) point //导入类point

    #endif

    {

    public:

    float y;

    float x;

    point();

    point(float x_coordinate, float y_coordinate);

    };

    #endif


    //文件名:point.cpp,point类的实现

    #ifndef DLL_FILE

    #define DLL_FILE

    #endif

    #include "point.h"

    //类point的缺省构造函数

    point::point()

    {

    x = 0.0;

    y = 0.0;

    }

    //类point的构造函数

    point::point(float x_coordinate, float y_coordinate)

    {

    x = x_coordinate;

    y = y_coordinate;

    }


    //文件名:circle.h,circle类的声明

    #ifndef CIRCLE_H

    #define CIRCLE_H

    #include "point.h"

    #ifdef DLL_FILE

    class _declspec(dllexport)circle //导出类circle

    #else

    class _declspec(dllimport)circle //导入类circle

    #endif

    {

    public:

    void SetCentre(const point ¢rePoint);

    void SetRadius(float r);

    float GetGirth();

    float GetArea();

    circle();

    private:

    float radius;

    point centre;

    };

    #endif


    //文件名:circle.cpp,circle类的实现

    #ifndef DLL_FILE

    #define DLL_FILE

    #endif

    #include "circle.h"

    #define PI 3.1415926

    //circle类的构造函数

    circle::circle()

    {

    centre = point(0, 0);

    radius = 0;

    }

    //得到圆的面积

    float circle::GetArea()

    {

    return PI *radius * radius;

    }

    //得到圆的周长

    float circle::GetGirth()

    {

    return 2 *PI * radius;

    }

    //设置圆心坐标

    void circle::SetCentre(const point ¢rePoint)

    {

    centre = centrePoint;

    }

    //设置圆的半径

    void circle::SetRadius(float r)

    {

    radius = r;

    }

    类的引用:

    #include "../circle.h"  //包含类声明头文件

    #pragma comment(lib,"dllTest.lib");


    int main(int argc, char *argv[])

    {

    circle c;

    point p(2.0, 2.0);

    c.SetCentre(p);

    c.SetRadius(1.0);

    printf("area:%f girth:%f", c.GetArea(), c.GetGirth());


    return 0;

    }


      从上述源代码可以看出,由于在DLL的类实现代码中定义了宏DLL_FILE,故在DLL的实现中所包含的类声明实际上为:

    class _declspec(dllexport) point //导出类point

    {



    }


      和

    class _declspec(dllexport) circle //导出类circle

    {



    }


      而在应用工程中没有定义DLL_FILE,故其包含point.h和circle.h后引入的类声明为:

    class _declspec(dllimport) point //导入类point

    {



    }


      和

    class _declspec(dllimport) circle //导入类circle

    {



    }

    不错,正是通过DLL中的
    
    
    class _declspec(dllexport) class_name //导出类circle 
    
    {
    
    …
    
    }
    
    
      与应用程序中的
    
    
    class _declspec(dllimport) class_name //导入类
    
    {
    
    …
    
    }
    
    
      匹对来完成类的导出和导入的!
    
      我们往往通过在类的声明头文件中用一个宏来决定使其编译为class _declspec(dllexport) class_name还是class _declspec(dllimport) class_name版本,这样就不再需要两个头文件。本程序中使用的是:
    
    
    #ifdef DLL_FILE
    
    class _declspec(dllexport) class_name //导出类
    
    #else
    
    class _declspec(dllimport) class_name //导入类
    
    #endif
    
    
      实际上,在MFC DLL的讲解中,您将看到比这更简便的方法,而此处仅仅是为了说明_declspec(dllexport)与_declspec(dllimport)匹对的问题。
    
      由此可见,应用工程中几乎可以看到DLL中的一切,包括函数、变量以及类,这就是DLL所要提供的强大能力。只要DLL释放这些接口,应用程序使用它就将如同使用本工程中的程序一样!
    
      本章虽以VC++为平台讲解非MFC DLL,但是这些普遍的概念在其它语言及开发环境中也是相同的,其思维方式可以直接过渡。 

    展开全文
  • 今天写程序的时候遇到了这错误,原因很简单,就是头文件中声明类的时候,函数的声明写错了,例如: class a { a(); //构造函数 ~a();//析构函数 int max( int A , int B);//正确的声明方法 int...

    错误:此声明中没有存储类或类型说明符

    情况描述:

    今天在写程序的时候遇到了这个错误,原因很简单,就是在头文件中声明类的时候,函数的声明写错了,例如:

    class a
    {
    	a(); //构造函数
    	~a();//析构函数
    	/******************************************
    	int max( int A , int B);//一、正确的声明方法,定义写在.cpp文件中
    	
    	int a::max( int A , int B )//二、直接定义的方法,也是正确的
    	{
    		if ( A > B ) return A;
    		return B;
    	};
    	******************************************/
    	int a::max( int A , int B );//错误的声明方法会导致.cpp文件中函数定义部分会出现错误:此声明中没有存储类或类型说明符
    	
    	
    }
    

    以上就是我对该问题的看法,若有疏漏之处,还请您指出,大家共同进步!

    展开全文
  • Java中工程、包、介绍

    千次阅读 多人点赞 2016-09-28 13:01:04
    介绍了Java中工程、包、使用和需要注意的地方
  • opencv SVM图像分类工程文件

    千次下载 热门讨论 2015-07-30 08:37:40
    2、我的模块所使用到的函数和产生的中间结果都是在一个categorizer类中声明的,由于不同的执行阶段中间结果有很多个,例如:训练图片聚类后所得到单词表矩阵,svm分类器的训练的结果等,中间结果的产生是相当耗时的...
  • 怎样从一个DLL导出一个C++

    千次阅读 2018-08-28 23:01:23
    怎样从一个DLL导出一个C++ 自从Windows开始,动态链接库(DLL)就是Windows平台的一个组成部分。动态链接库允许在一个独立的模块封装一系列的功能函数,然后以一个显式的C函数列表提供外部使用者使用。在上个...
  • 怎样VC++删除一个类

    千次阅读 2008-06-13 15:20:00
    如何彻底删除一个类?[问题提出]我程序里加入了其它的,现在我不想要了,如何删除它呢? 解决方法1:1、资源管理器删除xxx.h xxx.cpp 2、以文本方式打开MMM.dsp,删除以下两部分,其中//xxx为你要删除的...
  •  当一个类被多个程序使用时,一般将声明(包含成员函数的声明)放在指定的头文件,用户编程时,只需将这个头文件包含进来,而不必每个使用该的程序重复书写其声明。而成员函数的定义则一个源文件...
  • C++中一个源文件调用另外一个源文件的方法,并且没有在工程中有头文件的声明。 直接其中一个源文件包含另外的源文件,一般是main的源文件包含另外的源文件。 #include "name.cpp" int main...
  • 核心:头文件相互引用,一个#include,另一个class C C++头文件相互#include时最好是: (1)"CA.h" #include "CB.h". (2)"CB.h"中用的前向声明: class CA; (3)最好加上头文件卫士( #ifndef *** #define *** ...
  • :   图二: 图一中的错误是由于图二中的MainActivity文件名称新建工程的时候,选择默认。修改成与public一致的名称后,程序可以正常运行。    ...
  • package lianxi; public interface jiekou { public static final double PI = 3.1415926; public double area(); } package lianxi;...public class shixian implements jiekou { ... public s...
  • 转自:... ...一些大的工程中,可能会包含几十基础,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时
  • 新建一个VC++ win32的程序, 源文件加下添加.cpp文件,一般放main函数 #include &lt;iostream&gt; #include &lt;locale&gt; #include "human.h" using namespace std; int main() ...
  • cpp————声明 定义 实现

    千次阅读 2017-02-10 15:56:13
    是c++引入的核心数据类型,是对数据和方法的封装,地位上与内置类型(复合类型)相同,只是种自定义数据类型 声明 声明,又称的前向声明,即forward declaration,告诉编译器class类型,但当前并不知道...
  • 今天尝试自己实现vector数据结构底层,定义vector模板的时候,还想像往常一样把分为.h文件和.cpp文件,把成员函数的声明放在.h文件,把具体实现放在.cpp文件,结果测试时发现编译过程报错。...
  • 本文依照代码来说明这样一个问题:如果我们的mapper文件没有声明字段和实体的属性对应关系,那么查询出来的字段的值能不能放到实体类中? 答案是:如果查询的字段(org_id)和实体的字段(org_id)完全一样。则是...
  • Qt工程中使用工程外的ui文件的方式:作为一个类直接使用、包含到自己的类中或继承使用将ui文件添加到工程中,作为一个类以直接使用 注:这里指使用原本不属于该工程的ui文件 第一步:在工程文件.pro添加UI文件...
  • 单文档的ImgPro工程,头文件出现多public声明,能不能把它们合并到一起,这样的用意是什么,求指点。 class CImgProView : public CView { protected: // create from serialization only CImgProView(); ...
  • 前置声明的使用

    千次阅读 2011-05-19 10:49:00
    书写C++代码的过程当中,人们有时会用到一个前置声明的东西。那么使用这个前置声明对于程序员来讲有什么好处呢,我们什么时候可以利用这个前置声明呢?下面就用一个具体的例子来解释前置声明的用法。
  • 类声明和成员函数定义的分离

    千次阅读 2015-10-12 21:06:59
    为了实现的隐蔽性,对成员函数的定义一般不放在头文件,而放在另一个文件,即类声明和函数定义是分别放在两个文件的。 实际上一个C++程序是由3个部分组成的:类声明头文件(后缀为.h);实现文件(后缀...
  • 带你玩转Visual Studio——带你新建一个工程

    万次阅读 多人点赞 2015-09-23 23:33:23
    接着上一篇文章带你玩转Visual Studio——开篇介绍继续讲这个主题,现在我们从创建一个新的工程开始。一步一步创建项目 依次选择菜单:File\New\Project,打开New Project对话框。 <1>.选择项目类型:Win32 ...
  • 本文章主要总结Qt5.9Creator自定义一个信号,然后一个类里面用该信号触发槽函数的实例。具体的实例是在类ClassA自定义一个信号Signal1,然后MAinWindows中用该信号Signal1来触发槽函数SlotFunction()...
  • C++ 软件工程中的继承

    千次阅读 多人点赞 2021-05-14 06:51:54
    C++ 软件工程中的继承. 软件重用是什么, 软件重用的技术, 以及类库的概念.
  • 菜鸟一枚,之前一直vs中一个源程序写到底,没有使用C++变成 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下面直接开始: 新建一个VC++ win32的程序, 源文件加下添加.cpp文件 头文件添加....
  • (1)前提为,另一个文件的函数,不能是静态函数,即不能有static修饰。 调用方法,调用前进行声明,然后直接调用即可。 声明方法: 1 直接调用前,写函数声明: 如调用函数为int func(int a),那么...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 246,316
精华内容 98,526
关键字:

在工程中声明一个类