2011-03-17 207 views
0

嗨 任何人都可以幫助我使用此代碼。我是新來的C++C++命名空間問題

#include <stdio.h> 
#include<iostream> 
using namespace std; 

namespace manish 
{ 
    double mean(double a, double b); 
} 

double mean(double a, double b) 
{ 
    return (a+b)/2; 
} 

我想使靜態libray爲了這個,我用命令 G ++ calc_mean.cpp -o mean.o 它給我下面的錯誤

/usr/lib/gcc/x86_64-linux-gnu/4.4.3/../../../../lib/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 

能有人告訴我我做錯了什麼? 或如何爲某個功能製作命名空間,以便可以在其他地方使用其名稱空間使用

+3

爲什麼你在manish命名空間中聲明瞭平均值,但是是匿名定義的。另外,這個問題與命名空間無關,而是如何使用GCC編譯靜態庫。 – dcousens 2011-03-17 07:30:12

+0

在這裏看看做一個靜態庫來計算平均值:http://www.adp-gmbh.ch/cpp/gcc/create_lib.html – stefaanv 2011-03-17 07:36:25

回答

0

您正在使用-o這意味着編譯器期望這些文件創建一個完整的程序。但是,完整的程序必須包含main()函數。您應該使用:

g++ -c calc_mean.cpp 

如果您沒有主要功能。

0

main是在程序加載時將調用的函數。你告訴編譯器創建一個運行時會有主函數的程序。

添加到您的代碼

void main(){ 
    printf("My program has started"); 
} 

您也聲明瞭一個函數調用馬尼什::平均值(指的是在馬尼什命名空間功能),但您所提供的函數的代碼在全局命名空間的意思是: :平均

你應該嘗試這樣的:

#include <stdio.h> 
#include<iostream> 
using namespace std; 
namespace manish 
{ 
    double mean(double a, double b); 

    double mean(double a, double b) 
    { 
    return (a+b)/2; 
    } 
} 

void main(){ 
    double result = manish::mean(2.0, 4.0); 
    printf("My program has started - the result is %f", result); 
} 
+1

'void main()'不正確。 'main' _must_有一個返回類型'int'。 – 2011-03-17 07:37:59

9

這是無關的命名空間。如果你想編譯而不鏈接,你必須提供-c選項GCC:

g++ -c calc_mean.cpp -o mean.o 

你所得到的錯誤是因爲G ++正試圖創建一個可執行程序(你還沒有告訴它其他)您需要定義標準入口點:main

沒有什麼內在的錯誤聲明在一個mean命名空間,並在全局命名空間範圍界定另一mean是,雖然在這種情況下,第一個聲明沒有使用,因此不會有任何效果。

要從生成的目標文件生成靜態庫,您需要使用存檔實用程序(ar)。例如: -

ar rcs libmean.a mean.o 
1

建立與g++ -c選項告訴GCC不調用鏈接,因爲你是建館並沒有什麼聯繫。