我已经实现了一个可以正常工作的类复合体。导致问题的头文件
http://coliru.stacked-crooked.com/a/b6bff3884e8e2460
现在我想产生一个头文件:
//
// cplex.h
//
//
//
//
//
#ifndef cplex_h
#define cplex_h
#include <iostream>
class complex
{
friend complex operator-(const complex& c);
friend complex operator +(const complex& c1 , const complex& c2);
friend complex operator +(const complex& c1 , const double& db);
friend complex operator +(const double& db , const complex& c1);
friend complex operator-(const complex& c1, const double& d);
friend complex operator-(const complex& c1 , const complex& c2);
friend complex operator-(const double& d ,const complex& c1);
friend complex operator *(const complex& c1 , const complex& c2);
friend complex operator *(const complex& lhs , const double& rhs);
friend complex operator *(const double& lhs , const complex& rhs);
friend complex operator /(const complex& lhs, const complex& rhs);
friend complex operator /(const complex& lhs, const double& rhs);
friend complex operator /(const double& lhs, const complex& rhs);
friend std::istream& operator>>(std::istream &is , complex &cp);
private:
double re;
double im;
public:
// constructors
complex(); // default constructor;
constexpr complex(const double real,const double img);
complex(double real);
complex(const complex& rhs);
// member functions;
double real() const;
double imag() const;
complex& operator = (const complex&);
complex& operator =(const double &);
complex& operator += (const complex&);
complex& operator +=(const double& other);
complex& operator -=(const double& db);
complex& operator -= (const complex&);
complex& operator *=(const double& db);
complex& operator *= (const complex&);
complex& operator /=(const double& db);
complex& operator /= (const complex&);
};
std::ostream& operator <<(std::ostream &os ,const complex &cp);
#endif /* cplex_h */
好了,所以最后我想要做一些cxxtest和我调用默认的构造函数(complex x;
) 我得到一个错误信息:
duplicate symbol _main in: /var/folders/08/s_gsvpm577vgftp3tj2_47hr0000gn/T//ccbn1AAH.o complex.o ld: 1 duplicate symbol for architecture x86_64 collect2: error: ld returned 1 exit status
#include "cplex.h"
#include <cxxtest/TestSuite.h>
class cptests : public CxxTest::TestSuite
{
public:
void test1(void)
{
complex x;
TS_ASSERT_EQUALS(x.real(), 0);
TS_ASSERT_EQUALS(x.imag(), 0)
}
};
在另一方面,如果我尝试调用另一个构造
complex x(5.0,5.0);
,而不是
complex x;
我得到的错误信息:
In file included from cptests.h:9:0,
from runner.cpp:23:
cplex.h:45:15: warning: inline function 'constexpr complex::complex(double, double)' used but never defined
constexpr complex(const double real,const double img);
^
Undefined symbols for architecture x86_64:
"complex::complex(double, double)", referenced from:
cptests::test1() in ccpZuOPa.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
我知道我的构造精细工作:测试他们在类复杂。
试图解决这些问题,我有几个问题:
请问我constexpr构造已经被我的头类中定义?即使它已经在课堂复合体中定义。
这些函数是否在类complex中定义,需要在头文件的类中声明:在我的情况下,class:complex?那么非成员功能呢?