分类: C/C++
2008-06-11 13:00:10
1)在.Net中, #include "iostream.h" 应改成:
#include
using namespace std;
2) 1>..\..\Li\2d\src\codetree.cc(86) : error C2668: 'pow' : ambiguous call to overloaded function
3)
1>..\..\Li\2d\src\codetree.cc(299) : error C2065: 't' : undeclared identifier
1>..\..\Li\2d\src\codetree.cc(299) : error C2065: 'ht2' : undeclared identifier
1>..\..\Li\2d\src\codetree.cc(299) : error C2065: 'ht1' : undeclared identifier
只是因为这三个变量在
#ifdef DECODER
double t, ht1, ht2;
#endif
语句中定义。
这不正是两个目标的原因吗。因此代码也分为两部分,DECODER是一部分,ENCODER是一部分。#ifdef是条件编译,想在Linux下也只要在运行的时候加上DECODER的参数就行吧,在vs 2005中怎么设?问了高手得知:
要在project的properties中设置:
Project -> properties -> C/C++ -> preprocessor -> preprocessor definitions 中填上条件编译的ENCODER 或 DECODER。
makefile中的两个目标的问题就解决了。
4)debug的时候,还有个问题,No symbols loaded.的错误。类似:
'。。。.exe': Loaded 'C:\Book\CANDemo\Release\CANDemo.exe', No symbols loaded.
'。。。.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll', No symbols loaded.
'。。。.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll', No symbols loaded.
'。。。.exe': Loaded 'C:\WINDOWS\system32\user32.dll', No symbols loaded.
'。。。.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll', No symbols loaded.
'。。。.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll', No symbols loaded.
。。。.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll', No symbols loaded.
。。。。。
搜索到这样一篇http://www.gamedev.net/community/forums/topic.asp?topic_id=390577很有用
原因:在dll中,debugging symbols没法加载进来。
解决方法:
5)可以debug了,在debug的时候怎么填写cmd中需要运行的arguments?
Project -> properties -> debugging -> command arguments中填写除命令(….exe)以外的参数。
6)d:\project\li\2d\src\../include/dwt.h(94) : error C2440: 'initializing' : cannot convert from 'double [20][20]' to 'double'
原因:c++中的数组不能互相赋值,因为数组名是常量。而在g++中可以编译通过。
方法一:for循环一个个赋值
方法二:用memcpy,加#include
#include
#include
void main()
{
int array[2][2]= {{1},{2}};
int * parray2 = new int [4];
memcpy(parray2, &array[0][0], 2*2*sizeof(int)); // 注意此处用2*2*sizeof(int),而非2×2
cout<<*parray2<<" " <<*(parray2+1)<< " "<<*(parray2+2)<<" "<<*(parray2+3)<
}
或
#include
#include
void main()
{
int array[2][2]= {{1},{2}};
int (*parray2)[2];
parray2 = new int[2][2]; // 参见
memcpy(parray2, &array[0][0], 2*2*sizeof(int));
cout<< parray2[0][0]<< parray2[0][1]<< parray2[1][0]<
}
注意:
cout<<"array address"<<&array[0][0]<<" "<<&array[0][1]<<" "<<&array[1][0]<<" "<<&array[1][1]<
cout<< array <<" "<< (array + 1)<<" "<< (array + 2)<<" "<<(array + 3)<
原因:array是二维数组,array + 1是第二行的地址,array + 2是第三行地址。。。。
正确应该是 *(array+a) +b 即为第(a+1)行,(b+1)列的元素。
7)因此该数组的赋值要用for或memcpy,而为规范(可能文件多了链接也会有问题)头文件中只能有函数声明,不能定义、调用普通函数。可定义内联函数。可定义常量,不能定义变量。不能实例对象。可定义宏。可定义static。