1.问题:opencv 中mat类型对应的头文件是什么?
解决方法:文件头加上以下代码
#include"cv.h"
#include"highgui.h"
using namespace cv;
2.f:\hu\ccv\ccv\ccv.cpp(19): error C2065: 'cout' : undeclared identifier
1>f:\hu\ccv\ccv\ccv.cpp(19): error C2065: 'endl' : undeclared identifier
解决方法:文件头加上以下代码
using namespace std;
补充知识点:Mat基本图像容器
3.error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'std::string' (or there is no acceptable conversion)
解决方法:只是没有包含#include <string>文件,就提示如此害人的错误信息,vc2010还差一点点,呵呵。
补充知识点:
1、学习MFC前先学下Windows API 然后学MFC会容易点。但不是必须的。
2、学习MFC之前把先把C++基础打好,如果一开始就MFC的话,C++以后你也会补习的。
3、学习MFC不需要了解其他框架,因为MFC本身就是微软的一个开发库。
学习路线:
《Windows程序设计》->孙鑫的《MFC深入详解》->侯捷的《深入浅出MFC》->《Win32多线程编程》->《windows核心编程》
《数据结构》必须要看的,《Effective C++》对C++提升。
4.指向虚函数表的_vfptr指针是const常量指针吗?
问题解答:const常量与非const常量只是针对代码和编译阶级来说,编译器会对const类型的数据进行写的限制。但是编译后生成相应机器代码后就无所谓const常量与非const常量了。虚函数表指针是形象的说法,是在编译器为类类型实例化分配内存的时候在对象内存的前面分配一个四字节的空间来存放一个地址值,该地址值指向一个虚函数表。所以这个_vfptr指针就无所谓const常量与非const常量了,只要获取得这个地址值的地址,就完全可以修改这个地址值。
5。设计模式——
#include "stdafx.h"
#ifdef _DEBUG
#include <string>
#endif // _DEBUG
#include <iostream>
#include <vector>
using namespace std;
class Barbucer
{
public:
void MakeMutton()
{
cout<<"bake sheep"<<endl;
}
void MakeChildrenWing()
{
cout<<"bake chicken wing"<<endl;
}
};
//abstract command class
class Command
{
protected:
Barbucer* receiver;
public:
Command(Barbucer* temp)
{
receiver = temp;
}
virtual void ExecuteCmd() = 0;
};
//command of bake sheep
class BakeMuttonCmd:public Command
{
public:
BakeMuttonCmd(Barbucer* temp):Command(temp){}
virtual void ExecuteCmd()
{
receiver->MakeMutton();
}
};
//command of bake chicken wing
class ChickenWingCmd:public Command
{
public:
ChickenWingCmd(Barbucer* temp):Command(temp){}
virtual void ExecuteCmd()
{
receiver->MakeChildrenWing();
}
};
//waitress
class Waiter
{
protected:
vector<Command*> m_commandList;
public:
void SetCmd(Command* temp)
{
m_commandList.push_back(temp);
cout<<"add orders"<<endl;
}
//inform,execute
void Notify()
{
vector<Command*>::iterator p = m_commandList.begin();
while(p!= m_commandList.end())
{
(*p)->ExecuteCmd();
p++;
}
}
};
int _tmain(int argc, _TCHAR* argv[])
{
//restaurant add baker mainlist waiter etc.
Barbucer* barbucer = new Barbucer();
Command* cmd = new BakeMuttonCmd(barbucer);
Command* cmd2 = new ChickenWingCmd(barbucer);
Waiter* girl = new Waiter();
//order dishes
girl->SetCmd(cmd);
girl->SetCmd(cmd2);
//waiter notify
girl->Notify();
return 0;
}
查看有虚函数类对象的示例化内容。
6.c++作图,用什么最方便?GDI、API还是什么?
我想用c++来做图和动画试试,可是不知道c++是靠什么来作图的。 搜了一下,网上说什么的都有,将tc里的graphics.h装到vc中,GDI,API,MFC。 直接乱了,唉,不知道哪个是了。 求前辈们解答,还有网上哪里有这方面的视频教程啊,或者好点的书,推荐本。 我手边的《mfc windows程序设计》里面的东西都看不懂,全是没解释的函数名就直接用了,纠结。
问题解答:通过提问,就知道你对相关概念相当混乱。 API:Application programming interface。应用程序编程接口,是一个很抽象的概念。简单来说就是别人提供给你一个类,或者函数来给你使用,那些类或者函数实现了某些特定的功能。 GDI:Graphics Device Interface.简单来说就是一种图形设备接口,本身是用C++来实现的。 MFC:Microsoft Foundation Classes。以C++类的形式封装了Windows的API,并且包含一个应用程序框架,主要作用就是减少程序开发人员的工作量,有人不喜欢用MFC,那就直接用最基础的API。 GDI中提供的类和函数也可以叫API,mfc中提供的类和函数也可以叫API。 C++是什么?是一个编程语言,定义了语法,当然C++标准也实现了很多基础的函数,那也可以叫API。 c++做图和动画: 首先你要明白动画是什么。动画简单来说就是一系列连续的图片按一定的速率播放(想象一下胶片电影的播放原理)。 我想任何编程语言都能做图和简单动画,只是对应的API不同而已,但是本质上的原理都是一样。 比如GDI提供了提供了能够画点,线,面等最基本的API,当然任何一个图形SDK都会提供最基础的API。 比如你要画一个圆。也许某些图形API提供了画圆的方法,直接调用一个函数就可以了,但是你需要知道圆到底是怎么画出来的。(2维)圆的数学定义是:假设圆点坐标为x0,y0.那么圆的笛卡尔坐标系方程就是(x-x0)^2+(y-y0)^2=R^2.最直观的想象就是画出圆上的每一个点。将方程变化一下:x=R*COS(θ)+x0;y=R*SIN(θ)+y0.θ范围(0-2π).可以每隔1度取一个点然后用线段连起来,最终看起来就是圆了,只要间隔度数越小,看起来就越圆。 比如你要做更专业的动画,那当然有更专业的方式,这个涉及到的问题就更深了。但是本质上全部是数学和物理,所以基本功是最重要的。 就像一个真正的武林高手必然有深厚的内功修养一样,只会花拳绣腿,那永远是江湖上的笑话。内功就是数学和物理,一切API都是招式。有了深厚的内功,学起招式来才能如鱼得水,变换无穷。相反永远不会变通,不能创新,只能是打杂跑腿。此比喻不一定恰当,但是希望你修炼好内功后,不在为这些琐碎的招式问题而烦恼。 API如何使用,看MSDN,最纯正的解释都在那里,网上随便搜的,都是人家看了以后加工的,那得看那个人理解的是否真正正确了,据我所知,网上%80+都是重复粗俗的信息。所以搞计算机,英语很重要,不要说您过来4级或者6级就行了,关键问题是能不能看懂MSDN,看懂英文资料,不要听人家乱说随便过个4级就能看懂MSDN,我敢说那是扯淡。考98是过4级,考60也是过,那能一样吗,一个读清华,和一个读三本的那学的能一样吗。要能完全看懂MSDN,简单的已考试过6级的标准来说,是不可能的。所以英语一定要扎实!
7.
#include "stdafx.h"
#ifdef _DEBUG
#include <string>
#endif // _DEBUG
#include <iostream>
#include <vector>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{}
8.
.CLW文件
VC Class Wizard信息文件,存放了Class Wizard的信息。 ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下。有时候ClassWizard出问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候会提示你是否重建。
.NCB文件
无编译浏览文件(no compile browser),当自动完成功能出问题时可以删除此文件。build后会自动生成。
.OPT文件
IDE的Option文件,工程关于开发环境的参数文件,如工具条位置等信息,保存工作空间的配置 。
所谓IDE,就是Integrated Developing Environment,也就是集成开发环境的意思,所以BCC、VC、VS、DEV C++、DJGPP都是c++的IDE
.APS文件
资源文件的二进制版本,资源辅助文件,一般不用去管他。支持Resource View
.bsc文件
浏览器信息文件,用于浏览信息文件,如果用Source Brower的话就必须有这个文件。如果不用这个功能的话,可以在Project Options里面去掉Generate Browse Info File,可以加快编译速度。
.dsp文件
DeveloperStudio Project,项目文件,文本格式,不过不熟悉的话不要手工修改。
.dsw文件
DeveloperStudio Workspace,是工作区文件,其他特点和DSP差不多。
.mak文件
这是MFC项目的项目文件,这也是与NMAKE兼容的文件。如果选择了External make文件可选项,则可人工对它编辑,但不能利用Visual C++许多项目编辑特性。
.plg文件
建立日志文件,是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),在Tools->Options里面有个选项可以控制这个文件的生成。
.hpj文件
Help Project,是生成帮助文件的工程,用microsfot Help Compiler可以处理。
.mdp文件
Microsoft DevStudio Project,是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的DSP格式。
.map文件
是执行文件的映像信息纪录文件,除非对系统底层非常熟悉,这个文件一般用不着。
.pch文件
Pre-Compiled File,是预编译文件,可以加快编译速度,但是文件非常大。
.pdb文件
Program Database,记录了程序有关的一些数据和调试信息,在调试的时候可能有用。
.exp文件
只有在编译DLL的时候才会生成,记录了DLL文件中的一些信息。