Почему линкер не видит мои (определенно определенные) внешние?

У меня есть класс с заголовком и.cpp файлом. Я объявляю свои функции в заголовке и определяю их в файле.cpp, как и вам.

Заголовок:

#pragma once

// my #includes 

class CDNAGenerator
{
private:
    // stuff 
public:
    CDNAGenerator(int, int);
    ~CDNAGenerator();

    void FilterMeasurementsForOutliers(std::vector<double>& measurement_values);

    // plenty more things

};

CPP:

CDNAGenerator::CDNAGenerator( int genes, int chromosomes )
{
    // constructor code
}

void CDNAGenerator::FilterMeasurementsForOutliers(std::vector<double>& measurement_values)
{
    // function code
}

Затем, из отдельного проекта в том же решении, я ссылаюсь на файл.h (но не на.cpp), что, по-видимому, приводит к множественным ошибкам определения):

#include "..\CalibrationTool\DNAGenerator.h"

И назовите эти функции:

CDNAGenerator* dnaGenerator = new CDNAGenerator(30, 0);
dnaGenerator->FilterMeasurementsForOutliers(values);

Но я получаю нерешенные внешние ошибки для CDNAGenerator :: CDNAGenerator (int, int) и для CDNAGenerator :: FilterMeasurementsForOutliers (класс std :: vector> &)

Я думал, что я правильно подцепил все, так что может кто-нибудь предположить, почему я получаю эту ошибку компоновщика?

0
источник поделиться
2 ответа

Добавить файл CPP в проект

0
источник

Какой компилятор вы используете? Gcc (mingw) doesn sup suport #pragma once Используйте защитные коды кода, чтобы избежать "нескольких определений".

#ifndef MYCLASS_H
#define MYCLASS_H
class MyClass {
...
}
#endif
0
источник

Посмотрите другие вопросы по меткам или Задайте вопрос