2015-11-08 7 views
-1

Как использовать два .cpp-файла в проекте?Как использовать два .cpp-файла в проекте (классе)?

main.cpp:

#include "second.h" 
int main() { 
    secondFunction(); 
} 

second.h:

void secondFunction(); 

second.cpp:

#include "second.h" 
void secondFunction() { 
    // do stuff 
} 

Он работает, но когда я использую класс это не работает.

empoyee.h:

class employee { 
public: 
void paymentmethod(); 
}; 

employee.cpp:

#include "employee.h" 
void employee::paymentmethod() { 
//code 
    } 

main.cpp:

#include "employee.h" 
main() 
{ employee em; 
em.paymentmethod() 

} 

Я выяснил ошибку в декларации .cpp.

+2

Это сложно сказать, что может быть неправильно, не глядя на содержимое Makefile. Пожалуйста, разместите содержимое файла Makefile. –

+2

Вы опустили включение employee.h в main.cpp? Также, пожалуйста, напишите сообщение об ошибке – user4578093

+1

Добро пожаловать в SO! Прежде всего, «помогите мне решить это» - это не вопрос, а ненадлежащий императив. Во-вторых, кажется, что ваш пост не содержит полного сообщения об ошибке, что затрудняет определение того, что пошло не так. –

ответ

0

Я не уверен, что это вы пытаетесь сделать, но вот несколько советов:

  • файл Каждый заголовок должен включать все заголовки, которые вы собираетесь использовать для этого файла или класса.
  • Каждый файл cpp, соответствующий конкретному заголовочному файлу, должен включать ТОЛЬКО этот файл заголовка.
  • Ваш main.cpp должен включать все заголовки, которые вы используете для своей программы.

Ваш код должен выглядеть следующим образом:

// main.cpp 
#include "second.h" 
#include "employee.h" 

int main(){ 
//code 
} 

В других ваших файлов:

//second.h 

//includes here 
void function(); 
//--------------------------------------------- 

//second.cpp 
#include "second.h" 

void function(){ //code } 

//--------------------------------------------- 

//employee.h 

//includes here 

class employee{ 
public: 
    void payment(); 
//ctor, dtor, and other declarations 
} 

//--------------------------------------------- 

//employee.cpp 

#include "employee.h" 

void employee::payment(){ //code } 

//rest of methods 

К сожалению, будут построены проблемы, если вы включите тот же заголовок более чем один раз в той же программы. Поэтому для всех файлов заголовков вы должны реализовать этот защитник:

#ifndef __MYCLASS_H__ 
#define __MYCLASS_H__ 

//includes 

class MyClass{ 
//declarations 
} 

#endif 
+1

Я не согласен с пунктами 2 и 3: ** 2 ** .cpp-файлы могут очень нуждаться в вещах из других заголовков, которые не нужны в соответствующем заголовке. ** 3 ** Основной файл должен, как и все остальные, включать только то, что ему нужно *. – Biffen

+0

Я вижу вашу точку зрения о файлах cpp, нуждающихся в заголовках, не в соответствующих заголовках, но я лично ставил все, что мне понадобится для моего cpp в соответствующем заголовке. Cpp должен быть свободен от деклараций, включает и любые другие директивы препроцессора. Cpp должен просто содержать код. Так я и научился. И руководство по стилю Google C++ не похоже на то, как это делается в частности.Он просто говорит: «любые включенные в соответствующий заголовок не должны включаться снова в соответствующий cc (т. Е. Foo.cc может полагаться на включение foo.h)». – SlenderPsycho

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