Я пытаюсь использовать указанный класс в другом, объявив его статическим параметром.Первый класс - это класс DNI или NID (на английском языке), а второй - счетчик.Программа должна рассчитывать итерации, необходимые для сортировки массива с помощью разных алгоритмов сортировки.Поэтому при каждом сравнении в классе DNI счетчик должен увеличиваться.
Проблема заключается в том, что компилятор жалуется на неопределенный символ ... Сообщение об ошибке: неопределенные символы для архитектуры x86_64:
"DNI:: counter ", на который ссылаются из:
DNI :: operator> (DNI const &) в main-3713cf.o
DNI :: operator> = (DNI const &) в main-3713cf.o
Жалуется только на двух операторов, и я не знаю почему.
Класс 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; };
};
Есть идеи, почему жалуются только на этих двоих?Спасибо!