1、警告 104 warning C4482: 使用了非标准扩展: 限定名中使用了枚举“policy::InitResult”
class policy
{
public:
enum InitResult
{ FAILED,SUCCESS};
};
正确:FAILED,
错误:InitResult:FAILED
不需要枚举名称限制
2、 警告 89 warning C4503: “std::_Tree<_Traits>::_Myval”: 超出修饰名的长度,名称被截断C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\ce\include\vector203
// C4503.cpp
// compile with: /W1 /EHsc /c
// C4503 expected
#include <string>
#include <map>
class Field{};
typedef std::map<std::string, Field> Screen;
typedef std::map<std::string, Screen> WebApp;
typedef std::map<std::string, WebApp> WebAppTest;
typedef std::map<std::string, WebAppTest> Hello;
Hello MyWAT;
<span style="font-family: Arial, Helvetica, sans-serif;">解决: </span>
<span style="font-family: Arial, Helvetica, sans-serif;">// C4503b.cpp </span>
// compile with: /W1 /EHsc /c
#include <string>
#include <map>
class Field{};
struct Screen2 {
std::map<std::string, Field> Element;
};
struct WebApp2 {
std::map<std::string, Screen2> Element;
};
struct WebAppTest2 {
std::map<std::string, WebApp2> Element;
};
struct Hello2 {
std::map<std::string, WebAppTest2> Element;
};
Hello2 MyWAT2;
3、警告 未找到下列环境变量:$(PLATFORMDEFINES)项目
4、全局变量和静态变量未初始化的问题
第一, 全局变量定义和初始化
例如,log4cxx使用的例子。
CREATE_LOGGERPTR_GLOBAL(logger_,logger_name)即定义了
log4cxx::LoggerPtrlogger_ = log4cxx::LoggerPtr(log4cxx::Logger::getLogger(logger_name));
在其他平台这样定义之后,直接使用LOG4CXX_INFO(logger_,message);即可。但是在wince 发现logger_为NULL。导致
内存错误。
也就是说,全局变量的定义是正确的,但是并没有被初始化。
主要有两种解决办法:第一,是把类的默认构造函数里进行初始化。第二是在借助其他函数来初始化,但因为是全局变量,需要避免被重复初始化。
第三,使用宏定义来代替一些全局的常量。
第二, 类内部定义的静态变量
例如,
classSQLPTRepresentation
{
public:
conststatic std::string kDatabaseName;
}
//初始化
const std::string SQLPTRepresentation::kDatabaseName = "policy";
实际情况,kDatabaseName为空字符。
解决办法:第一,放在构造函数里初始化。第二,定义一个函数,返回这个常量。第三,宏定义。
从根本上这个问题的解决是工程设置的问题,解决办法就是把属性,链接器,入口函数设为空,否。解释见
5、 Some kind of disk I/O error occurred
不要在共享内存里使用sqlite,或其他io操作。但文件读写是了是可以的
把工程属性运行时改成/MT
主要是C语言编译器有一些规则要求,比如,变量定义必须放在函数开始的地方。
8、错误 1 fatal error LNK1112: 模块计算机类型“THUMB”与目标计算机类型“ARM”冲突 coredll.lib
在属性,链接器下的命令行里增加 /machine:THUMB即可解决
9、Databyte misalignment 字节对齐问题。
在赋值时,例如把char buf[13],的第3~6作为整数赋值给 int a;
如果直接a=(int)(&buf[3]);可能会报自己对齐问题。应该改成memcpy(&a,&buf[3],sizeof(int));
或者把他们进行拼接a=buf[3]+buf[4]<<8+buf[5]<<16+buf[6]<<24;