проблема пространства имен c ++ - PullRequest
0 голосов
/ 17 марта 2011

привет Может ли кто-нибудь помочь мне с этим кодом. Я новичок в 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'

Может кто-нибудь сказать мне, что я делаю не так? или как создать пространство имен для функции, чтобы ее можно было использовать в другом месте, используя ее пространство имен

Ответы [ 4 ]

9 голосов
/ 17 марта 2011

Это не имеет ничего общего с пространствами имен.Если вы хотите скомпилировать, а не линковать, вы должны предоставить gcc опцию -c:

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

Ошибка, которую вы получаете, заключается в том, что g ++ пытается создать исполняемую программу (вы не сказалииначе) для которого вам нужно определить стандартную точку входа: main.

Нет ничего плохого в объявлении mean в одном пространстве имен и определении другого mean в глобальной области пространства имен, хотяв этом случае первое объявление не используется, поэтому не имеет никакого эффекта.

Чтобы создать статическую библиотеку из результирующего объектного файла, вам необходимо использовать утилиту архивирования (ar).Например:

ar rcs libmean.a mean.o
1 голос
/ 17 марта 2011

Сборка с опцией g++ -c, чтобы gcc не вызывал компоновщик, так как вы собираете библиотеку и вам не с чем связать.

0 голосов
/ 17 марта 2011

Вы используете -o, что означает, что компилятор ожидает, что файлы создадут полную программу.Однако полная программа должна содержать функцию main ().Вы должны использовать:

g++ -c calc_mean.cpp

Если у вас нет основной функции.

0 голосов
/ 17 марта 2011

main - это функция, которая будет вызываться при загрузке вашей программы.Вы говорите компилятору создать программу, которая при запуске будет иметь основную функцию.

добавьте это в свой код

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

Также вы объявили функцию с именем manish :: mean (среднее значение функции в пространстве имен manish), но вы предоставили код для среднего значения функции в глобальном пространстве имен :: mean

, попробуйте что-то вроде этого:

...