Программа как у Страуструпа:
// 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";
}
То же самое
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.