【C++】调试问题Bug记录

static 类型的变量需要在类外实现

例子:PrimerC++13章StrVec的实现

/tmp/ccHWCyce.o:在函数‘StrVec::push_back(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)’中:
StrVec.cpp:(.text+0x38):对‘StrVec::alloc[abi:cxx11]’未定义的引用
/tmp/ccHWCyce.o:在函数‘StrVec::alloc_n_copy(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*)’中:
StrVec.cpp:(.text+0x82):对‘StrVec::alloc[abi:cxx11]’未定义的引用
/tmp/ccHWCyce.o:在函数‘StrVec::free()’中:
StrVec.cpp:(.text+0x11e):对‘StrVec::alloc[abi:cxx11]’未定义的引用
StrVec.cpp:(.text+0x153):对‘StrVec::alloc[abi:cxx11]’未定义的引用
/tmp/ccHWCyce.o:在函数‘StrVec::reallocate()’中:
StrVec.cpp:(.text+0x2c0):对‘StrVec::alloc[abi:cxx11]’未定义的引用
/tmp/ccHWCyce.o:StrVec.cpp:(.text+0x32f): 跟着更多未定义的参考到 StrVec::alloc[abi:cxx11]
collect2: error: ld returned 1 exit status

之前写单例模式的时候遇到过一次,没搞清除也没有记住,给自己一个差评。
修改
在类外实现:allocator<string> StrVec::alloc;

获得随机数
#include <time.h>
#include <stdlib.h>
int random() {
	srand((int)time(0));
	//获得1到100的随机数
	return rand()%100;
}
must take exactly one argument

输入输出运算符必须是非成员函数,可以在类外面定义,然后在类里声明为友元。

‘std::istream& Sales_data::operator>>(std::istream&, Sales_data&)’ must take exactly one argument
     istream& operator>>(istream &is, Sales_data& sd) {

输出char指针的地址

1.如果给cout提供一个指针,它将打印指针所指向的地址单元的地址,但如果指针类型为char *,则cout将打印char *指针所指向的字符串。
2.如果要显示char *指针所指向的地址单元的地址,需要将char *类型的指针强制转化为另一种类型的指针,可以将char *类型的指针强制转化为int *类型指针。

passing ‘const Sales_data’ as ‘this’ argument discards qualifiers [-fpermissive]

编译器认为成员函数可能会修改被const限定的变量

class Sales_data {
friend bool operator<(const Sales_data&, const Sales_data&);
public:
    Sales_data(const std::string& s, double p): isbn(s), price(p) { }
    std::string isBn() { return isbn; } //error
    /*
    *修改为
    *std::string isBn() const { return isbn; }
    */
private:
    std::string isbn;
    double price;
};

bool operator<(const Sales_data& sd1, const Sales_data& sd2) {
    return sd1.isBn() < sd2.isBn();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值