2013-09-18 3 views
0

У меня есть класс с заголовком и .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 (класс станд :: вектор> &)

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

+0

Вы * имеете * добавили исходный файл в проект? Или построили с ним, если вы сделаете это вручную? –

+0

@ joachim-pileborg Да, это определенно в проекте (предполагая, что вы имеете в виду проект, где живет его .h-файл?) – technorabble

+0

Отдельный проект, это ключ. Если вы хотите, чтобы код в проекте A использовал код в проекте B, тогда проект B должен создать библиотеку, с которой может ссылаться проект A. Это происходит не потому, что оба проекта являются частью одного и того же решения. Или вы можете просто добавить исходный файл в оба проекта. – john

ответ

0

Добавить файл CPP к объекту

+0

Может подтвердить, что файл DNAGenerator.cpp является и всегда был частью проекта CalibrationTool. Вы предлагаете мне добавить его в вызывающий проект? – technorabble

+0

Да, в противном случае вам нужно экспортировать этот класс и связать файл lib – Matt

+0

, к сожалению, который тянет во всех зависимостях файла DNAGenerator.cpp, наводя мой список ошибок нерешенными внешними. Ожидается ли это? Если мне в конечном итоге нужно перебрать все, что побеждает цель. Похоже, что должен быть более чистый способ ... – technorabble

0

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

#ifndef MYCLASS_H 
#define MYCLASS_H 
class MyClass { 
... 
} 
#endif 
+0

VS2012, поэтому он достаточно безопасен, хотя и не является независимым от компилятора. – technorabble

 Смежные вопросы

  • Нет связанных вопросов^_^