2011-03-17 170 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不调用链接,因为你是建馆并没有什么联系。