写C++遇到的问题

  1. 对于私有变量,我们所说的私有是对类外直接访问不可见,因此,下面的情况是可以直接调用私有变量的,如下:


class A{
private:
    int a,b,c;
public:
    A(int a,int b,int c):a(a),b(b),c(c){};
    A(const A& temp){
        a = temp.a;
        b = temp.b;
        c = temp.c;
    }
    void print(){
        cout<<a<<" ";
        cout<<b<<" ";
        cout<<c<<endl;
    }
};
int main(){
    A a(1,2,3);
    A b(a);
    b.print();
}

因为A(const A& temp)构造函数是与temp属于同一个类,因此可以在类内直接调用temp的私有变量,以下情况属于类外调用,则不可,如下:

class B{
private:
    int e,f,g;
public:
    //B(int a,int b,int c):a(a),b(b),c(c){};
    B(const A& temp){
        e = temp.a;
        f = temp.b;
        g = temp.c;
        cout<<temp.a<<" ";
        cout<<temp.b<<" ";
        cout<<temp.c<<" ";
    }
    void print(){
        cout<<e<<" ";
        cout<<f<<" ";
        cout<<g<<endl;
    }
};
int main(){
    A a(1,2,3);
    B b(a);
    b.print();
    cout<<a.a<<endl;//类外调用,不可以
}

因为B与temp是不同的类,属于类外调用,不可以
另外直接在main函数这样的外部函数调用也是不可以的

  1. 不能将“this”指针从“const XXX”转为“XXX &”

出现这样的问题一般是在const成员函数中调用了非const成员函数

  1. e:\c++project\mytinystlnew\test…/head/List.h(130) : error C2100: 非法的间接寻址

E:\C++Project\MyTinySTLNew\Test\ListTest.cpp(85): 参见对正在编译的函数 模板 实例化“void TinySTL::list<int,TinySTL::allocator>::insert(TinySTL::list_iterator,InputIterator,InputIterator)”的引用
with
[
T=int
, InputIterator=int
]
经常出现这个,因为在于重载的insert函数中有参数为(iterator position,const size_type& n,const value_type& x)和(iterator position,InputIterator first,InputIterator last)的,当在调用insert(position,10,2)的时候int型无法转换成size_t,进而去调用了后者,造成了参数错误,所以要显示转型为size_t,不然会出错!

  1. *error: cannot convert ‘__gnu_cxx::__normal_iterator<int*, std::vector >’ to ‘const void*’
    memcpy(result, first, (last - first) * sizeof(first));

*这个问题是因为,经过traits萃取出来的类型变成了vector::iterator,而memcpy无法将其转换成const void,所以把函数改成了
memcpy(result, &(*first), (&(*last) - &(first)) * sizeof(first));
return result + (&(last) - &(first));
通过
再取&得到T
类型才可以使用memcpy!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值