我正在尝试实现一个函数类,但是出现了重定义错误。我知道这很愚蠢,但有人可以帮忙吗?
===头文件===
#ifndef _NS4_h
#define _NS4_h
#include <vector>
#include <list>
namespace NS4{
class complex{
double r, i;
public:
complex(double a=0, double b=0) : r(a), i(b) {};
complex operator+(complex c);
complex &operator+=(complex c);
complex &operator=(complex c);
};
// function class
class Add{
complex val;
public:
Add(complex c){ val = c; }
Add(double r, double i) { val = complex(r, i); }
void operator()(complex& c) const { c += val; }
};
void h(std::vector<complex> &aa, std::list<complex> ll, complex z);
}
#endif
===部分cpp文件===
using namespace NS4;
void test9()
{
vector<complex> aa;
aa.push_back(complex(0,1));
aa.push_back(complex(0,2));
aa.push_back(complex(0,3));
list<complex> ll;
ll.push_back(complex(1,1));
ll.push_back(complex(1,2));
ll.push_back(complex(1,3));
complex zz(1,1);
// the following line is not working
// error C2371: 'zz' : redefinition; different basic types
Add(zz); // Add(complex(1,1)) is working.
h(aa,ll, zz);
}
答案 0 :(得分:3)
你有一个Add类,所以你需要创建一个它的实例,以便调用构造函数。
所以在下面的例子中,a
是我们Add
类的一个实例。
Add a(zz);
答案 1 :(得分:2)
您可以选择在声明中将变量名括号括起来。
int (i);
与
相同int i;
因此,在您的情况下,您声明名为zz
的{{1}}类型的变量,并且已存在名为Add
的变量。你可能想将zz
作为参数传递给zz
构造函数,但是你应该给变量命名:
Add
但是,我根本没有看到该实例的使用位置。
但是如果你只是想在没有声明变量的情况下调用Add adder(zz);
的构造函数,你可以在整个表达式中加上括号:
Add
欢迎使用C ++;)
答案 2 :(得分:1)
Add(zz)
应该是什么意思?您认为这意味着什么?
Add(zz)
实际上是zz
类型的对象Add
的声明,即
Add(zz);
相当于
Add zz;
您之前已经定义过zz
,这就是您获得重新定义错误的原因。这里不足为奇。
如果不了解您Add(zz)
行尝试做什么,就无法进一步帮助您。