
|
|
Auteur
|
Message
|
1
|
|
|
|
Bonjour,
je débute en C, j'ai fait ma première fonction, et DEV-C++ refuse de compiler mon programme, que voici.
EX1.C
/* programme mettant à zéro la diagonale du milieu de la matrice */
#include <stdio.h>
#include "matrice.h"
main()
{
int **mat;
int ilig, icol, taille;
printf("Entrez la taille de la matrice : ");
scanf("%d", &taille);
decmatrice(mat, taille, taille);
initmatrice(mat, taille, taille);
for (ilig=0;ilig<taille;ilig++)
for (icol=0;icol<taille;icol++)
if (ilig==icol)
mat[ilig][icol] = 0;
affichmatrice(mat, taille, taille);
freematrice(mat, taille, taille);
}
matrice.c (certaines de ses fonctions ne servent pas dans le programme EX1, mais pour d'autres exercices. Ils ne gènent pas, si?):
/* Déclaration de la matrice */
int decmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
mat = (int**)calloc(tlig, sizeof(int*));
for (ilig=0;ilig<tlig;ilig++)
mat[ilig] = (int*)calloc(tcol, sizeof(int));
return 0;
}
/* Initialisation de la matrice */
int initmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
for (icol=0;icol<tcol;icol++)
{
printf("Entrez la valeur de la %dème ligne et de la %dème colonne :\n", ilig+1, icol+1);
scanf("%d", &mat[ilig][icol]);
}
return 0;
}
/* Affichage de la matrice */
int affichmatrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
{
for (icol=0;icol<tcol;icol++)
printf("%d",mat[ilig][icol]);
printf("\n");
}
return 0;
}
/* Libération de la mémoire */
int freematrice(int **mat, int tlig, int tcol)
{
int ilig, icol;
for (ilig=0;ilig<tlig;ilig++)
free(mat[ilig]);
free(mat);
return 0;
}
matrice.h :
int decmatrice(int **mat, int tlig, int tcol);
int initmatrice(int **mat, int tlig, int tcol);
int affichmatrice(int **mat, int tlig, int tcol);
int freematrice(int **mat, int tlig, int tcol);
Quand je compile EX1.C, voici les erreurs que j'obtiens :
[Linker error] undefined reference to `decmatrice(int**, int, int)'
[Linker error] undefined reference to `initmatrice(int**, int, int)'
[Linker error] undefined reference to `affichmatrice(int**, int, int)'
[Linker error] undefined reference to `freematrice(int**, int, int)'
ld returned 1 exit status
j'ai lu quelque part qu'il fallait taper :
c -l(matrice)
dans "option du compilateur" -> ajouter ces commandes lors de l'éditeur de liens.
Dans ce cas, il compile (pas d'erreur), mais EX1.EXE n'est pas créé.
J'ai essayer de le mettre aussi dans "ajouter ces commandes lors de l'appel au compilateur", mais ça fait pareil.
Quelqu'un peut-il m'aider?
Merci
|
|
|
|
|
Salut!
Sous Dev-C++, tu fais :
- Fichier -> Nouveau -> Projet
- tu sélectionnes Console Application et Projet C
Dev-C++ crée automatiquement un fichier main.c.
Dans le panneau de gauche qui liste les fichiers du projet, tu fais un clic droit sur le fichier main.c et Renommer le fichier. Tu le renommes ex1.c.
Ensuite, toujours dans le même panneau, tu cliques (clic droit) sur le nom de ton projet (par défaut c'est Projet1), puis Nouveau fichier source. Tu renommes ce fichier comme précédemment, avec le nom matrice.c. Enfin tu ajoutes un nouveau fichier source, que tu renommes matrice.h.
Dans chacun de ces trois fichier, tu copies/colles le code que tu as posté sur le forum et tu sauvegarde tout. Ensuite tu fais Exécuter -> Compiler & Exécuter (ou F9) et ton projet se compile et se lance. Le fichier .exe est bien créé ainsi que les deux fichiers matrice.o et ex1.o. Rien besoin de plus dans les options du projet.
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
Merci pour ce mode opératoire complet!
Pourquoi faut-il faire cela?
Par contre, ça ne marche pas avec moi, j'obtiens ce message d'erreur lors de la compilation :
C:\Dev-Cpp\Makefile.win [Build Error] No rule to make target `all'. Stop.
Maintenant, j'ai une autre question : quand je crée matrice.c et matrice.h (et projet1 aussi) ils sont créés directement dans dev-cpp. Y a-t-il possiblité de les mettre dans des dossiers, histoires que je ne mélange pas mes fichiers avec les autres (ceux qui font fonctionner devcpp) ?
Mais peut-être que ça a un rapport avec mon erreur?
merci
|
|
|
|
|
Il faut sauvegarder tous tes projets créés dans des répertoires séparés. Quand tu cliques sur OK après avoir choisi les options du projet (Console Application et Projet C) il faut sauvegarder le projet ailleurs que dans le répertoire proposé par défaut (qui est C:\Dev-Cpp). Tu sauvegardes le projet dans Mes Documents, dans un sous-répertoire destiné à recevoir tous les fichiers du projet et seulement eux. De même, quand tu fais sauvegarder tout (ou sauvegarder sous quand il s'agit d'un seul fichier) il faut faire la sauvegarde dans le même répertoire que celui du le projet.
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
Ok, merci.
Mais les erreurs sont toujours là. Pas celle d'hier soir (je ne sais pas ce que j'avais fait!), mais les premières :
[Linker error] undefined reference to `decmatrice(int**, unsigned int, unsigned int)'
[Linker error] undefined reference to `initmatrice(int**, int, int)'
[Linker error] undefined reference to `affichmatrice(int**, int, int)'
[Linker error] undefined reference to `freematrice(int**, int, int)'
ld returned 1 exit status
D:\PROG C\TP5\Makefile.win [Build Error] [Projet1.exe] Error 1
je peux redonner le code, mais c'est le même que précédemment.
Merci de ton aide
|
|
|
|
|
Salut!
Dans le répertoire de ton projet, tu devrais avoir au moins ces fichiers (dans mon cas, mon projet s'appelle Projet1) :
- Projet1.dev
- matrice.h
- matrice.c
- ex1.c
Le fichier Projet1.dev contient : [Project]
FileName=Projet1.dev
Name=Projet1
UnitCount=3
Type=1
Ver=1
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=
IsCpp=0
Icon=
ExeOutput=
ObjectOutput=
OverrideOutput=0
OverrideOutputName=
HostApplication=
Folders=
CommandLine=
UseCustomMakefile=0
CustomMakefile=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=
[Unit1]
FileName=ex1.c
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit2]
FileName=matrice.c
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit3]
FileName=matrice.h
CompileCpp=0
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0
Quand tu compiles le projet, Dev-Cpp produit un fichier nommé Makefile.win qui contient : # Project: Projet1
# Makefile created by Dev-C++ 4.9.9.2
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = ex1.o matrice.o $(RES)
LINKOBJ = ex1.o matrice.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib"
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = Projet1.exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before Projet1.exe all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(CC) $(LINKOBJ) -o "Projet1.exe" $(LIBS)
ex1.o: ex1.c
$(CC) -c ex1.c -o ex1.o $(CFLAGS)
matrice.o: matrice.c
$(CC) -c matrice.c -o matrice.o $(CFLAGS)
L'application de la commande make sur ce fichier va créer les fichiers matrice.o (qui contient le code de decmatrice, initmatrice, affichematrice et freematrice), ex1.o et Projet1.exe.
Vérifie que tu as bien cela (change Projet1 par le nom de ton projet).
@+
-->Message édité par Minus-et-Cortex le 06/04/2007 09:06:32<--
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
Oui, j'ai bien la meme chose pour projet1.dev et Makefile.
Les fichiers ex1.o et matrice.o sont créés.
Donc normallement, ça devrait marcher?
|
|
|
|
|
En tout cas, cela fonctionne bien chez moi. Essaye peut-être en sélectionnant l'option Tout reconstruire dans le menu Executer (raccourci Ctrl+F11).
@+
-------
Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.
Gustave Parking
|
|
|
|
|
ça ne marche pas non plus...
merci beaucoup d'avoir essayé, et si quelqu'un a du temps à perdre, il peut tenter de m'aider!^^
Quoi qu'il en soit, je vous tiendrais au courant.
Merci encore
|
|
1
|
|

|


|