[問題] member function與friend function 重複
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
g++
程式碼:
-----main.cpp-----
#include <iostream>
#include <stdlib.h>
#include "Complex.h"
using namespace std;
int main(){
Complex a;
a=Polar(5.6, 1.8);
Abs(a);
return 0;
}
-----Complex.h-----
#include <iostream>
#include <cmath>
class Complex {
public:
Complex(const double re = 0, const double im = 0);
Complex Polar(const double leng, const double arg);
friend Complex Polar(const double leng, const double arg);
double Abs();
friend double Abs(const Complex& x);
private:
double real;
double imag;
};
//Complex Polar(const double leng, const double arg);
錯誤訊息
'Polar' was not declared in this scope
如果把註解拿掉就能正確執行
但是friend Abs也沒有在class外面定義他的prototype卻能編譯過
請問版上各位高手這是為什麼呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.123.85.57
※ 編輯: tabinoyume 來自: 122.123.85.57 (04/18 21:42)
推
04/18 22:00, , 1F
04/18 22:00, 1F
剛有打錯 更正
推
04/18 22:09, , 2F
04/18 22:09, 2F
friend那行不算是宣告嗎?
推
04/18 22:17, , 3F
04/18 22:17, 3F
推
04/18 22:28, , 4F
04/18 22:28, 4F
我發覺剛剛提問的不是很恰當,我重新改過內容了
能麻煩各位在幫忙解惑嗎?
推
04/18 23:00, , 5F
04/18 23:00, 5F
→
04/18 23:00, , 6F
04/18 23:00, 6F
推
04/18 23:02, , 7F
04/18 23:02, 7F
→
04/18 23:03, , 8F
04/18 23:03, 8F
→
04/18 23:04, , 9F
04/18 23:04, 9F
我現在問題是Abs我也沒有事先宣告,但是卻能編譯得過
但是Polar卻不行
兩者只差在名為Abs的member function與friend function參數不一樣
而Polar是完全一樣
-----Complex.cpp-----
#include "Complex.h"
Complex::Complex(const double re, const double im){
real = re;
imag = im;
}
Complex Complex::Polar(const double leng, const double arg){
real = leng*cos(arg);
imag = leng*sin(arg);
return *this;
}
double Complex::Abs(){
return sqrt(real*real+imag*imag);
}
Complex Polar(const double leng, const double arg){
double real = leng*cos(arg);
double imag = leng*sin(arg);
return Complex(real,imag);
}
double Abs(const Complex& x){
return sqrt(x.real*x.real+x.imag*x.imag);
}
→
04/18 23:13, , 10F
04/18 23:13, 10F
→
04/18 23:13, , 11F
04/18 23:13, 11F
錯誤是顯示在main裡使用到Polar那行
推
04/18 23:30, , 12F
04/18 23:30, 12F
→
04/18 23:31, , 13F
04/18 23:31, 13F
推
04/18 23:32, , 14F
04/18 23:32, 14F
g++ -ggdb -Wall -c main.cpp
g++ -ggdb -Wall -c Complex.cpp
g++ -ggdb -Wall -o main main.o Complex.o
→
04/18 23:32, , 15F
04/18 23:32, 15F
→
04/18 23:33, , 16F
04/18 23:33, 16F
推
04/18 23:47, , 17F
04/18 23:47, 17F
→
04/18 23:47, , 18F
04/18 23:47, 18F
→
04/18 23:48, , 19F
04/18 23:48, 19F
推
04/18 23:50, , 20F
04/18 23:50, 20F
→
04/18 23:51, , 21F
04/18 23:51, 21F
→
04/18 23:52, , 22F
04/18 23:52, 22F
→
04/18 23:52, , 23F
04/18 23:52, 23F
→
04/18 23:53, , 24F
04/18 23:53, 24F
推
04/18 23:57, , 25F
04/18 23:57, 25F
推
04/18 23:59, , 26F
04/18 23:59, 26F
→
04/19 00:00, , 27F
04/19 00:00, 27F
推
04/19 00:01, , 28F
04/19 00:01, 28F
→
04/19 00:02, , 29F
04/19 00:02, 29F
※ 編輯: tabinoyume 來自: 122.123.85.57 (04/19 00:12)
→
04/19 01:56, , 30F
04/19 01:56, 30F
→
04/19 01:58, , 31F
04/19 01:58, 31F
→
04/19 01:58, , 32F
04/19 01:58, 32F
→
04/19 02:00, , 33F
04/19 02:00, 33F
→
04/19 02:01, , 34F
04/19 02:01, 34F
→
04/19 02:04, , 35F
04/19 02:04, 35F
→
04/19 02:05, , 36F
04/19 02:05, 36F
→
04/19 08:12, , 37F
04/19 08:12, 37F
→
04/19 08:25, , 38F
04/19 08:25, 38F
→
04/19 08:26, , 39F
04/19 08:26, 39F
→
04/19 10:00, , 40F
04/19 10:00, 40F
→
04/19 10:13, , 41F
04/19 10:13, 41F
→
04/19 10:45, , 42F
04/19 10:45, 42F
→
04/19 10:46, , 43F
04/19 10:46, 43F
→
04/19 10:46, , 44F
04/19 10:46, 44F
→
04/19 10:49, , 45F
04/19 10:49, 45F
→
04/19 10:53, , 46F
04/19 10:53, 46F
→
04/19 10:56, , 47F
04/19 10:56, 47F
→
04/19 10:58, , 48F
04/19 10:58, 48F
→
04/19 12:03, , 49F
04/19 12:03, 49F
推
04/19 12:15, , 50F
04/19 12:15, 50F
→
04/19 21:45, , 51F
04/19 21:45, 51F
→
04/19 21:45, , 52F
04/19 21:45, 52F