Как использовать функцию в трех разных файлах .cpp - PullRequest
0 голосов
/ 15 июня 2011

У меня есть три .cpp файла с именами MeshLoader.cpp , DynamicXMesh.cpp и StaticXMesh.cpp

У меня есть функция в MeshLoader.cpp файле с именем FindTexturePath , и я хочу вызвать и использовать ее в DynamicXMesh.cpp и StaticXMesh.cpp files.

Я включил MeshLoader.cpp (# include "MeshLoader.cpp") файл в загрузочные XMesh файлы и, конечно, получаю сообщение об ошибке, которое говорит, что функция уже определена ...

Также я пытался использовать pragma один раз и ifndef ...:

//This is "MeshLoader.cpp"
pragma once

#ifndef MLOAD
#define MLOAD
  char* FindTexturePath( char* TexturePath ,LPSTR FileNameToCombine){
      ...
      ...
      ...
  }
#endif

/////

//This is StaticXMesh.cpp
#include "MeshLoader.cpp"
...
...
...
this->StatXMeshTexturePath = FindTexturePath(StatXMeshTexturePath,d3dxMaterials[i].pTextureFilename);
...
...

///// И тот же вызов для DynamicXMesh.cpp

Надеюсь, я достаточно ясно объяснил ... Спасибо, что уделили мне время ...

Ответы [ 4 ]

8 голосов
/ 15 июня 2011

Вам нужно создать MeshLoader.h и поместить в него что-то вроде этого

#ifndef INCLUDED_MESH_LOADER_H
#define INCLUDED_MESH_LOADER_H

char* FindTexturePath( char* TexturePath ,LPSTR FileNameToCombine);

#endif

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

2 голосов
/ 15 июня 2011

Предпочтительный способ - поместить объявление функции в файл .h и позволить компоновщику объединить все файлы .cpp в один исполняемый файл.можно сделать то, что у вас есть, сделав функцию inline или static.

1 голос
/ 15 июня 2011

Как заявили другие пользователи, вы хотите поместить объявлений в файл заголовка (.h или .hpp).

Иногда вы можете захотеть иметь определение в заголовочном файле. На этом этапе вы определяете статическую функцию: static char* FindTexturePath(...) { .. }

1 голос
/ 15 июня 2011

поместите прототип функции в файл заголовка (MeshLoader.h) и включите этот файл везде, где вам нужно использовать эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...