2013-10-22 62 views
0

這個程序是寫在我們的書,我們被告知用C和C++編譯它,儘管它不適用於這兩個。下面的錯誤是當我試圖以.cpp格式編譯它我想在C++中運行這個程序,但我不斷收到這兩個錯誤:LNK2019和LNK1120

第一個錯誤:LNK2019:無法解析的外部符號「long __cdecl oddnumber(short)」(?oddnumber @@ YAJF @ Z)在函數中引用「int __cdecl evennumber (INT)」(evennumber @@ YAHH @ Z?) 第二個錯誤:LNK1120:1周無法解析的外部

// This program shows function and variable declarations and their scopes. 
#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
//#include<iostream.h> 
int keven = 0, kodd = 0; 
long evennumber(short); 
long oddnumber(short); 
int even(int); 
int evennumber(int a) { 
    // genuine declaration 
    if (a == 2) { 
     printf("keven = %d, kodd = %d\n", keven, kodd); 
     return keven; 
    } 
    else { 
     a = (int) a/2; 
     if (even(a)) { 
      // Is a even? 
      keven++; 
      return evennumber(a); 
     } 
     else { 
      kodd++; 
      return oddnumber(a); 
     } 
    } 
    // return a; 
} 
int oddnumber(int b) { 
    // genuine declaration 
    if (b == 1) { 
     printf("keven = %d, kodd = %d\n", keven, kodd); 
     return kodd; 
    } 
    else { 
     b = 3 * b + 1; 
     if (!even(b)){ 
      //Isbodd? 
      kodd++; 
      return oddnumber(b); 
     } 
     else { 
      keven++; 
      return evennumber(b); 
     } 
    } 
    // return b; 
} 
int even(int x) { 
    // % is modulo operator. 
    return ((x % 2 == 0) ? 1 : 0); 
} 
void main() { 
    register short r = 0; // a register type variable is faster, 
    int i = r; // it is often used for loop variable 
    float f; 
    for (r = 0; r < 3; r++) { 
     printf("Please enter an integer number that is >= 2\n"); 
     scanf("%d", &i); 

     if (even(i)) 
      f = evennumber(i); 
     else 
      f = oddnumber(i); 
    } 
} 
+0

可能重複[什麼是未定義的引用/未解析的外部符號錯誤,以及如何解決它?](http://stackoverflow.com/questions/12573816/what- is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – Andrey

回答

1

鏈接器表明您聲明的符號long evennumber(short);,卻找不到的定義。首先檢查你的函數的簽名:聲明和定義必須匹配!例如,我想你想宣佈int oddnumber(int)而不是?

如果您定義了幾個具有相同名稱但簽名不同的函數,請小心。這在C++中是允許的,但在C中是不允許的。

+0

哦,它甜蜜的工作謝謝你們!你都很棒! – user2088210

+2

@ user2088210:接受答案比評論中的感謝要快得多 –

+0

@Andy T:agree;)它將問題標記爲關閉 – lolando

相關問題