1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Я уже полгода наверное мучаюсь с C++. Постоянно Code::Blocks и Microsoft Visual 2008 выдают ошибки. Кто разбирается - напишите пожалуйста небольшой тест-код для MS Visual 2008, чтобы по выдающим ошибкам вы нашли проблему..
#include "stdafx.h" #include <iostream> using namespace std; int main() { cout<<"Hello"<<endl; return 0; }
Вот что я написал. А вот что эта гадина выдает при компиляции -
>------ Построение начато: проект: First_primer, Конфигурация: Debug Win32 ------ 1>Компиляция... 1>First_primer.cpp 1>Компоновка... 1>test.obj : error LNK2005: _main уже определен в First_primer.obj 1>E:\My Documents\Visual Studio 2008\Projects\First_primer\Debug\First_primer.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более 1>Журнал построения был сохранен в "file://e:\My Documents\Visual Studio 2008\Projects\First_primer\First_primer\Debug\BuildLog.htm" 1>First_primer - ошибок 2, предупреждений 0 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
Добавлено через 4 мин. Ну здесь я догадался исключить First_pramer.obj из проекта. Но теперь у меня появляется черное окошечко при компиляции и исчезает. А внизу пишет что без ощибок.
Но теперь у меня появляется черное окошечко при компиляции и исчезает. А внизу пишет что без ощибок.
При компиляции или при запуске? Если при запуске - то так и должно быть, ты ж не задерживаешь окно до нажатия любой клавиши, а сразу завершаешь программу. Так с чего оно должно задерживаться?
#include "stdafx.h" #include <iostream> using namespace std; int main() { cout<<"Hello"<<endl;
cin.get(); // Вот теперь должно ждать нажатия клавиши return 0; }
То и означает, что переменная (ну, если не переменная - то константа, или еще какая сущность - смысл от этого не меняется) с одинаковым именем была описана в разных единицах трансляции. Вот смотри:
f1.cpp
#include <iostream>
int i = 20;
int main() { std::cout << "Hello world: i = " << i << std::endl; return 0; }
f2.cpp
int i = 15;
int f(int x) { return 2 * x; }
Заметила, что в обоих файлах присутствует переменная i? Так вот на этапе компиляции - все в порядке - в каждом файле - своя переменная, файл f1.cpp прекрасно компилируется в f1.obj, f2.cpp - в f2.obj... И тут запускается линкер. Которому надо собрать это все воедино, в exe-шник. А у линкера-то как раз большие проблемы: и в одном и в другом файле он находит упоминание о том, что должна быть переменная i... Но два объекта с одинаковым именем существовать в программе не могут. И какую переменную линкер должен выбрать? Случайную, а вторую - просто вышвырнуть из проекта? Линкер поступает проще: он сообщает программисту об ошибке, и программист должен решать, что выбросить, а что оставить...