LNK2005, “déjà défini d'erreur” erreur d'éditeur de liens dans MSVC2010

Je suis en train de mettre en œuvre un projet de test en utilisant le Nuage de points de la Bibliothèque et OpenCV avec plusieurs fichiers. Lorsque j'essaie de compiler, j'ai le "déjà défini message d'erreur. Probablement que je suis en train de faire quelque chose de stupide qui ne se rendent pas compte, pour quelque raison - j'ai essayé un couple de solutions trouvées ici, aucun d'eux ne semblait être l'aider dans mon cas.

Ce que j'ai:

Un libs.h fichier, lorsque je charge les fichiers lib (dans les propriétés du Projet, je ne l' .lib chemins d'accès et de charger les libs "à la main", comme les en-têtes):

#pragma once

#ifndef PCLTEST_LIBS
#define PCLTEST_LIBS

#ifdef _DEBUG
  #pragma comment(lib, "pcl_apps-gd.lib")
  #pragma comment(lib, "pcl_common-gd.lib")
  //a bunch of other debug libs
#else
  //the release libs
#endif
#endif

Un fichier principal à partir de laquelle j'ai simplement supprimé tout ce qui, à ce point de debug:

//load the libs
#ifndef PCLTEST_LIBS
#include "libs.h"
#endif

//pcltest includes
//if only this first one is #included, everything is OK
#include "opencvOperations.h"
//#including this one causes the error
#include "files.h"
//these ones are not working also
//#include "cloudOperations.h"
//#include "visualize.h"

//c++ headers
#include <stdio.h>
#include <string>
//#include <sstream>
//#include <iostream>

void writeInfo()
{
    //some std::cout calls
}

int main( int argc, char* argv[] )
{
    writeInfo();
    //this function is in opencvOperations.h and works OK
    pcltest::openLena();
}

Puis-je obtenir plusieurs messages d'erreur dans ma main.obj que certains (PCL liées) les symboles sont déjà définis dans les fichiers.obj. J'utilise PCL, les appels à la fois dans opencvOperations et de fichiers, le premier est OK, le deuxième ne fonctionne pas.

Edit:
Pour ajouter plus de détails, mes fichiers.h en-tête:

#pragma once

#ifndef PCLTEST_FILES
#define PCLTEST_FILES

//pcl headers
#ifndef PCL_COMMON_H_
#include <pcl/common/common_headers.h>
#endif
#ifndef PCL_IO_FILE_IO_H_
#include <pcl/io/file_io.h>
#endif
#ifndef PCL_IO_PCD_IO_H_ 
#include <pcl/io/pcd_io.h>
#endif
#ifndef PCL_IO_PLY_IO_H_ 
#include <pcl/io/ply_io.h>
#endif
//boost headers
#ifndef BOOST_FILESYSTEM_OPERATIONSX_HPP 
#include <boost/filesystem/operations.hpp>
#endif

#endif

namespace pcltest
{
    //function to open PCL or binary PLY files
    pcl::PointCloud<pcl::PointXYZ>::Ptr openCloud(std::string filename);

    //function to save the point cloud to PCD format
    void saveCloud();
}

Avant de séparer le code en plusieurs fichiers distincts, tout fonctionnait bien (avec les mêmes paramètres du projet).

Edit2:

J'ai localisé la source du problème,

#include <pcl/io/ply_io.h>

les causes de cette. Pour l'instant, je me suis débarrassé de tout ce qui a trait à PLIS et tout fonctionne bien. Je vais le regarder plus tard, cela pourrait être un PCL bibliothèque problème spécifique. Toujours étrange pour moi, pourquoi cet appel causes de l'éditeur de liens d'erreur dans un autre fichier, où je n'ai même pas utiliser les PLIS liés fonctions/variables.

  • ce variable est-il le dire est déjà défini et d'où vient que les variables qui apparaissent?
  • Pour les fichiers.h, 4 symboles sont répertoriés: "enum pcl::io::plis::Format __cdecl pcl::io::plis::getEndianess(void)" "int __cdecl pcl::io::plis::getTypeFromTypeName(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)""unsigned __int64 __cdecl pcl::io::plis::getMaximumCapacity(int)" "void __cdecl pcl::io::plis::write(struct pcl::io::plis::caméra const &,la classe std::basic_ostream<char,struct std::char_traits<char> > &,bool)" (je n'ai pas vraiment appeler l'une de ces)
  • ne fichiers.h contient l'ensemble de définition de la fonction, ou tout simplement le prototype?
  • juste le prototype, j'ai copié l'original pots
  • Est-il une réelle définition de code (par opposition à déclaration) passe dans les pcl-têtes? En particulier, où sont pcl::io::plis::getTypeFromTypeName et pcl::io::plis::write-ils définis?
  • Je suis en utilisant le binaire pcl paquet, de sorte qu'ils sont dans pcl-io.dll et pcl-io.lib (et pcl-io-gd.dll pcl-io-gd.lib pour debug)
  • J'ai localisé la source du problème, #include <pcl/io/ply_io.h> les causes de cette. Pour l'instant, je me suis débarrassé de tout ce qui a trait à PLIS et tout fonctionne bien. Je vais le regarder plus tard, cela pourrait être un PCL bibliothèque problème spécifique, dans ce cas, je vais écrire à la PCL liste de diffusion.

InformationsquelleAutor Oszkar | 2011-12-01