关于赋值操作符的重载: 这个程序为什么能在g++上编译通过?

原创 2006年06月21日 11:17:00

// 一般认为gcc是学习C/C++的最佳编译器。可是下面这个程序在g++3.4.4上竟然可以编译通过。

#include <vector>
#include <iostream>
using namespace std;

class val_box
{
private:
    int val;
public:
    int get()
    {
        return val;
    }
    void set(int new_val)
    {
        val = new_val;
    }    
    val_box& operator= (val_box& right)   //  实际上, const 是必需的
    {   // 赋值操作符的重载
        val = right.val;
        return *this;
    } 
};

class query
{
private:
    vector<val_box> val_box_collection;
public:
    void Insert(int val)
    {
        val_box temp_val_box;
        temp_val_box.set(val);
        val_box_collection.push_back(temp_val_box);
    }
    friend ostream& operator<< (ostream& os, query& right)
    {
        for(vector<val_box>::iterator iter = right.val_box_collection.begin();
            iter != right.val_box_collection.end(); ++iter)
        {
            os << (*iter).get() << "/t";
        }       
        return os;
    }
};


int main()
{
    query test_class;
    test_class.Insert(1);
    test_class.Insert(2);
    test_class.Insert(3);
    cout << test_class << endl;
    cin.get();
    return 0;
}


/*
vc2005的错误描述:
Error 1 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'const val_box' (or there is no acceptable conversion) 

Digital Mars 的错误描述:
C:/dm/bin/../stlport/stlport/stl/_algobase.h(327) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
C:/dm/bin/../stlport/stlport/stl/_algobase.h(139) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
C:/dm/bin/../stlport/stlport/stl/_algobase.h(335) : Error: need explicit cast for function parameter 1 to get
from: const val_box*
to  : val_box*
main.cpp:
--- errorlevel 1
*/


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

交叉编译能在arm平台上运行的Qt应用程序的步骤

我们的电脑一般来说,现在主流的还是X86平台(当然,随着64位机的普及,相信以后格局会变化,暂不讨论)。对于Qt应用程序来说,我们在PC机上开发的时候,因为本身我们的开发软件Qt creator是运行...

Qt学习(如何交叉编译一个Qt程序使其能在板子上运行)

如何交叉编译一个Qt程序使其能在板子上运行      首先安装交叉编译器arm-linux-gcc3.4.6,先将其压缩包放到一个目录下,然后对其进行解压,举了解压命令为:tar xjvf arm-l...

如何让ubuntu12.04(64 bit)下面编译的程序能在10.04下成功运行

大概可以按照以下步骤进行: 1. 分析那些函数用的是10.04下没有的glibc的版本 通常12.04下编译的程序在10.04下运行报glibc2.14没找到的错误,这里就要找出那个函数用...

【程序语言】C++ 构造函数 拷贝构造函数 =操作符重载 析构函数 详细分析

当你满怀轻松得心情写下一个简单的C++类:class MyClass { private: int a; } 你心里也许十分高兴,因为你恐怕找不到更简单的类了,写简单的东西总是轻松越快...

C++ 操作符重载

C++操作符重载专题

  • 2012-04-15 08:16
  • 181KB
  • 下载

C++复制构造函数与重载赋值操作符

http://www.cnblogs.com/BlueTzar/articles/1223313.html 复制构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一...

复制构造函数与赋值操作符的重载

1. 试验功能:带有指针成员且指针成员为类类型时,自定义复制构造函数与赋值操作符的行为是怎样的。 2. 试验结果: (1)当指针成员为一般普通成员时,我们可以自己在复制构造函数中为指针分配内存并拷...
  • ljq32
  • ljq32
  • 2012-08-10 16:21
  • 1370
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)