В C++ не компилируется программа из модулей

программирование windows C++ dev-c++

Программа как у Страуструпа:


// header.h
extern char * prog_name;
extern void f ();


// main.c
#include "header.h"
char * prog_name = "примитивный, но законченный пример";
int main ()
{
f ();
}


// f.c

#include <stream.h>
#include "header.h"
void f ()
{
cout << prog_name << '\n';
}

У Страуструпа сказано компилировать так:

$ CC main.c f.c -o silly

Соответственно, я компилирую так:

C:\Windows\System32\> gcc main.cpp f.cpp -o silly.exe

выдает
In file included from C:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../includ
e/c++/3.4.2/backward/iostream.h:31,
from C:\Users\Anna\Documents\C++\Module\f.cpp:2:
C:/Dev-Cpp/bin/../lib/gcc/mingw32/3.4.2/../../../../include/c++/3.4.2/backward/b
ackward_warning.h:32:2: warning: #warning This file includes at least one deprec
ated or antiquated header. Please consider using one of the 32 headers found in
section 17.4.1.2 of the C++ standard. Examples include substituting the <X> head
er for the <X.h> header for C++ includes, or <iostream> instead of the deprecate
d header <iostream.h>. To disable this warning use -Wno-deprecated.
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0xd):f.cpp: undefined referenc
e to `std::string::size() const'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x60):f.cpp: undefined referen
ce to `std::string::operator[](unsigned int) const'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x9f):f.cpp: undefined referen
ce to `std::string::operator[](unsigned int) const'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0xce):f.cpp: undefined referen
ce to `std::string::operator[](unsigned int) const'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x112):f.cpp: undefined refere
nce to `std::cout'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x117):f.cpp: undefined refere
nce to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std:
:char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char co
nst*)'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x127):f.cpp: undefined refere
nce to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std:
:char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char co
nst*)'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x14b):f.cpp: undefined refere
nce to `std::ios_base::Init::Init()'
C:\Users\Anna\AppData\Local\Temp/cckLdaaa.o(.text+0x166):f.cpp: undefined refere
nce to `std::ios_base::Init::~Init()'
collect2: ld returned 1 exit status

что я делаю не так?

Примечание:
Если компилировать в IDE, говорит, что не может найти f();

Примечание:
Хорошо, теперь:

header.h:
extern char * prog_name;
extern void f ();

main.cpp:
#include "header.h"

char * prog_name = "hello, world";
int main () {
f();
}

f.cpp:
#include <iostream>
#include "header.h"

void f() {
std::cout << prog_name << "\n";
}


То же самое
Ответы:
В начале header.h должно быть
> Если компилировать в IDE, говорит, что не может найти f();
---
Конечно не может, потому что f() определена в файле f.c, а в командной строке компилятору указан другой файл, f.cpp.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.