2 k876537 k876537 于 2016.04.30 10:57 提问

关于C++的友元函数实现在类的外部问题?
 #include<iostream>

using namespace std;

template<typename T>
class Complex
{
    friend ostream & operator<< <T> (ostream &out,Complex &tmp);
private:
    T a;
    T b;
public:
    Complex(T a, T b);
    void printR();
    Complex operator+(Complex &c);
};
int main()
{
    Complex<int> a(10,10);
    Complex<int> b(10,20);
    Complex<int> c = a+b;
    c.printR();

    return 0;
}
template<typename T>
ostream & operator<<(ostream &out,Complex<T> &tmp)
{
    out<< "a = " << tmp.a <<" b = " << tmp.b << endl;
    return out;
}
template<typename T>
Complex<T>::Complex(T a, T b)  //Complex  类的构造函数。
{
    this-> a = a;
    this-> b = b;
}
template<typename T>
void Complex<T>::printR()       //Complex 类的普通函数.
{
    cout << "a = " << a <<" b = " << b << endl;
}
template<typename T>
Complex<T> Complex<T>::operator+(Complex<T> &c)
{
    Complex<T> tmp(c.a+a,c.b+b);
    return tmp;
}

同样的程序在VS里面可以,但codeblocks里面却不行,应该怎么改呢?

1个回答

devmiao
devmiao   Ds   Rxr 2016.05.01 13:24
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++运算符重载(成员函数以及友元函数实现)
<br />运算符重载常用于解决结构体或是自己定义的类型的加减运算,提供了方便的方式!比如一个类里面的两个整数的相加,可以通过重载运算符+,其次运算符重载常用友元函数实现,可以实现更多的功能!因为友元函数可以访问类的所有成员!先写一个成员函数实现重载'+',睡觉后再写一个友元函数重载的方式!<br /> <br />include<iostream> #include<string> #include<cstring> using namespace std; class ST { priva
C++友元函数以及运算符重载
一、友元函数的作用 函数的私有和保护变量在类内可以访问,在类外只可访问公有变量;派生类在类内只可访问其基类的公有变量和保护变量,在类外只可访问其公有变量(要看具体的继承类型); 因此,在有些情况下,需要访问类的私有或保护变量时,不得不调用其成员函数,因为只有成员函数才有访问的权限。因而多出许多时间开销。 友元函数和类的成员函数的访问权限相同,但是其不是类的成员函数,它破坏了类的封装性;友元函
将类的成员函数作为回调函数(外一篇:友元函数)
转自:http://blog.csdn.net/xylary/article/details/1548596 将类成员函数用做C回调函数 提出问题:  回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。 分析原因: 普通的C+
第8周-重载运算符-实现复数类中的运算符重载-类的友元函数
/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2015 年 4 月 24 日 * 版 本 号:v1.0 * * 问题描述:请用类的友元函数,而不是成员函数,再次完成上面提及的运算符的重载; * 输入描述: ; * 程序
《C++第八周实验报告1-1(2)》----复数类中的运算符重载,用类的友元函数
/* 【任务1】实现复数类中的运算符重载 定义一个复数类重载运算符+、-、*、/,使之能用于复数的加减乘除。 (2)方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载; */ /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: Complex
编写程序定义Point类,有数据成员X,Y,为其定义友元函数实现重载+。
<br />#include <iostream.h><br />class Point<br />{<br />public:<br />   Point() { X = Y = 0; }<br />   Point( int x, int y ) { X = x; Y = y; }<br />   void Print() { cout << "Point(" << X << ", " << Y << ")" << endl; }<br />   friend Point operator+( Poin
C++友元函数实现
友元函数是一种特殊的函数,它必须要在类中进行声明,但其本身并不是类的成员函数,但友元函数可以访问类的私有成员变量。友元函数的好处:1、实现类之间的数据共享2、提高程序运行效率,方便编程友元函数的坏处:1、破坏数据的隐蔽性和类的封装性2、降低了程序的可维护性所有,友元函数应当谨慎的去使用它。实例:#include #include using namespace std ; class Stu
在复数类模板中使用友元函数实现复数相加
程序代码(这段代码在vc6.0中不能编译通过,在VS中能编译通过) #include using namespace std; template//类声明前加模板的声明 class Complex { public: Complex( ) { real=0; imag=0; }
c++友元全局函数、友元成员函数、友元类
1.友元函数 关键字:friend   特性:一个类的友元函数,可以访问到类中私有成员 推荐使用引用的方法取访问私有成员,更高效友元的定义写在public下和private下都是正确的,不过为了直观应写在开头 2.友元成员函数 将一个类的成员函数声明为另一个类的友元 3.友元类 定义一个类为另一个类的友元类,在Circle类中定义一
c++友元实现操作符重载
运算符重载的本质是一个函数#include <iostream> using namespace std;class A { private: int m_a; int m_b; friend A operator+(A &a1, A &a2);//友元函数访问私有属性,实现二元运算符重载 friend A operator++(A &a); //友元函数访问私有属性,实