我太水了~
我一直都知道自己的编程水平很low,但是今天还是再次刷新了自己对自己的认识,真是太水了。。。。
// 内部类
sp<xxx>,编译器一直抱错,xxx没有声明,问了同事L,因为xxx是另一个类的内部类,且是私有的,所以编译器没法识别
说明我对内部类,作用域没有什么认识。。
// 类的结构
inline bool compare(const Sale_item& lhs, const Sale_item& rhs)
{
return lhs.book <rhs.book;
}
typedef bool (*Comp)(const Sale_item&, const Sale_item&);
std::multiset <Sale_item, Comp > items(compare);
这段代码,我是写在cpp中的,但是同事L说这种写法很奇怪,应该作为类成员放在类中,不应该放在cpp中成为全局变量,
然后我就把上面的代码直接放在类里面,但是typedef bool (*Comp)(const Sale_item&, const Sale_item&);可以直接放在类中吗?
而且编译器报错,compare is not a type,莫名其妙,也不知道怎么改
//返回值是类类型
GpsLocation proceessLocation(){
// TO-DO
return GpsLocation();
}
写代码时,经常都是先写一个函数的壳,然后慢慢的填,但是一开始写了上面的函数,编译器报错,没有返回值
然后我写了return ; return NULL;return void;return void*(0);都不对,只能说自己没脑子,C++基础极差。。。
然后同事L,帮我写成了上面的样子,返回一个构造(对象),然后编译器编过了,但是不知道有没有其他更好的方法。
然后,我就想,如果没法返回有效的对象怎么办?,怎么报错?return -1?return NULL?很蠢的解决的方法。。。
同事L告诉我,用异常处理就行了,如果没有有效的对象就抛一个异常就行了,构造失败的时候也一样,抛一个异常就OK了
日了狗了,异常处理怎么写一点都不知道
// 空对象
Location location = process();
if(NULL != location){} 编译器报错了,说没有重载operater!=,这个该怎么办?要怎么判断一个类是不是空的?
然后我就想把location换成指针的?但是如果process返回的就是对象怎么办?,然后我把process返回值变成了对象的引用。
然后愚蠢的我用引用和NULL进行比较,判断引用是否为空,突然觉得不对,引用不可能是空的吧?真真对自己无语了。。。
// 异步处理
int add(){
mid;
deal(mid);
reurn mid;
}
要求,调用deal的时候,return mid继续执行,不用等deal执行完后再执行return mid,先将mid返回给上层,deal执行完后,会调用一个回调,
将处理结果上抛给上层,我想半天就想出了个deal用线程处理,也就是多线程,但是也不知道行不行。
// 多线程
需要上次掉add后,启一个线程,进行update的循环,循环里一直对location进行更新,目前用的是java多线程的C++封装,
也不知道用纯C++的应该怎么去实现。
// 容器
之前用过multimap,重复key不同的value,但是现在不需要什么对应关系,只有重复的key,但是不需要value,不知道该用哪种容器,
multiset行不行??容器的基本操作也忘得差不多了。
// 代码结构
不知道该怎么组织代码,这些函数放在什么地方,是公的还是私的,是否需要声明为虚的?是否要const,是否要static,是使用引用还是指针?
返回值是引用还是指针,什么时候需要链式构造,需不需要友元,需不需前置声明,需不需要虚析构,等等等,太多不知道怎么办。。
// 智能指针
今天用GpsfenceState mState = new GpsfenceState(), 蒙的觉得不对,得内存管理啊,然后就想用智能指针,
然后半天没想起来智能指针该怎么用,sp<GpsfenceState> mState = new GpsfenceState(),用的是java的C++包装的智能指针
结果编译器报错,has no member named 'decStrong',是StrongPoint.h中报的错,查了一下,是因为未继承class RefBase 类导致的问题,
也不知道为什么没有继承这个类会导致错误,然后就让GpsfenceState继承了这个类,就OK了。
上面的就是自己今天晚上遇到的问题,都是一些C++最基础的语法问题,结果搞到8点多还是没搞定,很沮丧的回家了。。。。