Erreur avec 'extern' utilisation — symbole externe non résolu
J'ai eu le message d'erreur suivant lors de la compilation, mais je suis sûr que les variables déclarées dans un Project2.c fichier. Quelqu'un pourrait-il me donner un indice de ce que j'ai fait de mal? Merci
1>main.obj : error LNK2001: unresolved external symbol _num_days
1>main.obj : error LNK2019: unresolved external symbol _countDays referenced in function _testIt
1>main.obj : error LNK2001: unresolved external symbol _what_birthday
1>main.obj : error LNK2001: unresolved external symbol _birth_day
1>main.obj : error LNK2001: unresolved external symbol _birth_month
1>main.obj : error LNK2001: unresolved external symbol _birth_year
Code Source:
#include <stdio.h>
/* the following five variables are defined inside project2.c */
extern int birth_year;
extern int birth_month;
extern int birth_day;
extern int what_birthday;
extern int num_days;
void countDays(void); //a declaration of your function
int num_tests_passed = 0;
void testIt(int test_num,
int year, int month, int day, int bday, int expected) {
birth_year = year;
birth_month = month;
birth_day = day;
what_birthday = bday;
countDays();
printf("your answer to test %d was %d, should have been %d\n",
test_num, num_days, expected);
/* check the correctness and quality of their solution */
if (num_days == expected) {
if ((birth_year == year) && (birth_month == month)
&& (birth_day == day)) {
num_tests_passed += 1;
} else {
printf("you got the answer correct,"
"but you don't follow instructions very well\n");
}
} else {
printf("oops.\n");
}
}
int main(void) {
/* test #1: Born Feb 4, 1964 and about to turn 41 */
testIt(1, 1964, 2, 4, 41, 41 * 365 + 11); //feb 29ths in '64, 68, 72,
//76, 80, 84, 88, 92, 96, 00, and 04 (11 days)
/* test #2: Born Jan 22, 1998 and about to turn 2 */
testIt(2, 1998, 1, 22, 2, 2 * 365); //no leap days
/* test #3: Born March 22, 1998 and about to turn 2 */
testIt(3, 1998, 3, 22, 2, 2 * 365 + 1); //feb 29, 2000
/* test #4: Born March 22, 1898 and about to turn 2 */
testIt(4, 1898, 3, 22, 2, 2 * 365); //no leap days
/* test #5: Born Jan 22, 1996 and about to turn 4 */
testIt(5, 1996, 1, 22, 4, 4 * 365 + 1); //feb 29, 1996
/* test #6: Born March 22, 1996 and about to turn 4 */
testIt(6, 1996, 3, 22, 4, 4 * 365 + 1); //feb 29, 2000
/* test #7: Born March 22, 1796 and about to turn 4 */
testIt(7, 1796, 3, 22, 4, 365 * 4); //no leap days
/* test #8: Born Jan 1, 1800 and about to turn 101 */
testIt(8, 1800, 1, 1, 101, 101 * 365 + 24); //There are 26 years divisible by 4
//between 1800 and 1901, all of these except 1800 and 1900 are leap years
//so there are 24 leap days
/* test #9: born Jan 1, 1900 and about to turn 100 */
testIt(9, 1900, 1, 1, 100, 100 * 365 + 24); //26 years divisible by 4
//1900 was not a leap year, and the 100th brithday comes
//before Feb 29, 2000, so only 24 leap days.
if (num_tests_passed == 9) {
printf("all tests passed successfully. Well done!\n");
} else {
printf("you only passed %d of the 9 tests. Looks like you've got some work to do\n",
num_tests_passed);
}
}
Nous aurons besoin de voir le lien de commande.
Vous pouvez compiler ce fichier C dans un fichier objet (.o fichier), mais pas un exécutable, à moins que vous le lien avec les autres fichiers nécessaires.
Vous pouvez compiler ce fichier C dans un fichier objet (.o fichier), mais pas un exécutable, à moins que vous le lien avec les autres fichiers nécessaires.
OriginalL'auteur user133466 | 2009-12-22
Vous devez vous connecter pour publier un commentaire.
Dans votre
project2.c
, assurez-vous que vous disposez de ces variables définies, et que le fichier est en fait partie de votre solution. Si le fichier source est omis que tout naturellement, l'éditeur de liens se plaindre qu'il ne pouvait pas trouver les définitions.Normalement, la meilleure pratique est de mettre ces variables dans un fichier d'en-tête et défini.
Pour un exemple simpliste, appelez ce fichier d'en-tête
project2.h
:Ici, pour suivre l'exemple, voici votre code avec le
extern
variables omises et mise en place d'un#include
à la place. Nous allons également donner à ce fichier un nom appelémyproject1.c
Puis dans
project2.c
vous voulez faire celaEt que votre solution se compose de
Ensuite, le projet devrait compiler sans erreurs d'édition de liens.
OriginalL'auteur t0mm13b