Неопределенный символ для архитектуры только двумя из 5 одинаковых методов - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь использовать указанный класс в другом, объявив его статическим параметром.Первый класс - это класс 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; };
};

Есть идеи, почему жалуются только на этих двоих?Спасибо!

...