Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3318 connectés 

 


Dernière réponse
Sujet : [C++] Pb au linkage
freds45

legreg a écrit a écrit :

renomme tes fichiers .c en .cpp
ou alors entoure tes declarations dans ton .h par un  

Code :
  1. #ifdef _cplusplus
  2. extern 'C' {
  3. #endif
  4. t_collection opencol(char *filename);
  5. #ifdef _cplusplus
  6. }
  7. #endif


 
edit:la solution la plus simple a mon gout si tu démarres
un nouveau projet est de renommer tes fichiers .c en .cpp
ou en .cc. Cela te permettra d'utiliser toutes les ressources du C++ dans ton nouveau projet.
 
A+
LeGreg




 
 
ok, je vais tenter de voir ca, merci :)


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
freds45

legreg a écrit a écrit :

renomme tes fichiers .c en .cpp
ou alors entoure tes declarations dans ton .h par un  

Code :
  1. #ifdef _cplusplus
  2. extern 'C' {
  3. #endif
  4. t_collection opencol(char *filename);
  5. #ifdef _cplusplus
  6. }
  7. #endif


 
edit:la solution la plus simple a mon gout si tu démarres
un nouveau projet est de renommer tes fichiers .c en .cpp
ou en .cc. Cela te permettra d'utiliser toutes les ressources du C++ dans ton nouveau projet.
 
A+
LeGreg




 
 
ok, je vais tenter de voir ca, merci :)

LeGreg renomme tes fichiers .c en .cpp
ou alors entoure tes declarations dans ton .h par un  

Code :
  1. #ifdef _cplusplus
  2. extern 'C' {
  3. #endif
  4. t_collection opencol(char *filename);
  5. #ifdef _cplusplus
  6. }
  7. #endif


 
edit:la solution la plus simple a mon gout si tu démarres
un nouveau projet est de renommer tes fichiers .c en .cpp
ou en .cc. Cela te permettra d'utiliser toutes les ressources du C++ dans ton nouveau projet.
 
A+
LeGreg

freds45

legreg a écrit a écrit :

il est ou le corps de opencol?
 
LeGreg




 
dans un autre fichier, read_col.c
 
pourtant, celui ci est bien compilé et utilisé lors du linkage, alors je pige pas :/

LeGreg il est ou le corps de opencol?
 
LeGreg
freds45 Compléments d'infos:
 
Message d'erreur du linker:


[~/old/root/kmac/gui]root@Landi4612>make
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o get_next_line.o get_next_line.c
g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o main.o main.cpp
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o my.o my.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o my_str_to_wordtab.o my_str_to_wordtab.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o openfile.o openfile.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o read_coll.o read_coll.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o search.o search.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o searchopts.o searchopts.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o utils.o utils.c
g++  -o gui get_next_line.o main.o my.o my_str_to_wordtab.o openfile.o read_coll.o search.o searchopts.o utils.o   -Wl,-rpath,/usr/lib/qt-3.0.4/lib -L/usr/lib/qt-3.0.4/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
main.o: In function `main':
main.o(.text+0x46): undefined reference to `opencol(char *)'
collect2: ld returned 1 exit status
make: *** [gui] Error 1
[~/old/root/kmac/gui]root@Landi4612>


 
La déclaration dans le .h de ma fonction:

Code :
  1. t_collection opencol(char *filename);


 
Le main:
 

Code :
  1. #include "includes.h"
  2. int    main(int ac, char **av)
  3. {
  4.   int    nbvols = 42;
  5.   int    current = 0;
  6.   int    i;
  7.   QApplication   a(ac, av);
  8.   QListView   liste(0, "liste" );
  9.   t_collection   coll;
  10.   coll = opencol(av[1]);
  11.   if(ac == 1)
  12.     {
  13.       printf("%s", SYNTAX);
  14.       exit (1);
  15.     }
  16.   nbvols = coll.volcount;
  17.   QListViewItem  *items[nbvols];
  18.   liste.addColumn("Volume" );
  19.   liste.setRootIsDecorated(1);
  20.   for(current = 0; current < nbvols; current++)
  21.     {
  22.       items[current] = new QListViewItem(&liste, "toto" );
  23.       for(i = 0; i < 3; i++)
  24. new QListViewItem(items[current], "sub" );
  25.     }
  26.  
  27.   a.setMainWidget(&liste);
  28.   liste.show();
  29.   return a.exec();
  30. }


 
Merci !  :)

freds45 Voila, j'ai écrit un petit truc en C, qui compile très bien. Les sources sont découpées en plusieurs fichiers .c .
J'ai voulu créer une petite interface graphique pour ca, avec QT. Je copie les fichiers du programme d'origine en C. Une fois arrivé au linkage, il ne trouve pas une fonction qui est définie dans un autre fichier, alors que ca marchait bien avant !
le prototype de la fonction est déclaré dans un .h, inclus dans la source en C++...
Je ne peux pas poster les sources, la, mais je tacherai de le faire demain.
Précision... tout cela est fait sous une slackware 8.1
voili voila, si qqun a une idée... ;)

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)