我试图在另一个类中使用指定的类,像静态参数一样声明它。 第一类是DNI或NID(英语)类,第二类是计数器。该程序必须计算使用不同排序算法对数组进行排序所需要的迭代次数。因此,在DNI类中的每次比较,计数器都必须增加。
问题是编译器抱怨未定义符号... 错误消息:体系结构x86_64的未定义符号:
“ DNI :: counter”,引用自:
DNI :: operator>(DNI const&)在main-3713cf.o中
DNI :: operator> =(main-3713cf.o中的(DNI const&)
它只有两个操作员抱怨,我不知道为什么。
DNI类:
#pragma once
#include <cstdlib>
#include <ctime>
#include "../Counter.hpp"
class DNI
{
private:
unsigned int num;
public:
static Counter counter;
DNI() {
num = 30000000 + (rand() % 50000000);
};
DNI(int i): num(i) {};
virtual ~DNI() {};
operator int() const { return num;};
bool operator==(const DNI & dni) {
counter++;
return dni.num == num;
};
bool operator<(const DNI & dni) {
counter++;
return num < dni.num;
};
bool operator>(const DNI & dni) {
counter++; // ERR HERE
return num > dni.num;
};
bool operator<=(const DNI & dni) {
counter++;
return num <= dni.num;
};
bool operator>=(const DNI & dni) {
counter++; // ERR HERE
return num >= dni.num;
};
};
反类:
#pragma once
#include <limits>
class Counter
{
private:
int accum;
int max;
int min;
int localAccum;
public:
Counter(){
reset();
};
void start() {
localAccum = 0;
};
int stop() {
min = localAccum < min ? localAccum:min;
max = localAccum > max ? localAccum:max;
accum += localAccum;
return localAccum;
};
void reset(void) {
min = std::numeric_limits<int>::max();
max = 0;
accum = 0;
};
Counter& operator++(int) {
localAccum++;
return *this;
};
int getAccum() { return accum; };
int getMax() { return max; };
int getMin() { return min; };
};
有人知道为什么它只在这两个地方抱怨吗? 谢谢!