LINUX.ORG.RU

Вопрос по KDevelop, please HELP!


0

0

Недавно начал програмировать под Linux как IDE использую KDevelop

и тут у меня возникла проблема если я создаю два файла

a.cpp int var; .....

b.cpp double var; ....

оба файла файла в цели проэкта (AutoManager) то Kdevelop не компилить - multipli definition of 'var' что за глюк файли а.cpp b.cpp никамими хидерами и инклудами не связаны под MС++ 6.0 все компилиться правильно

PLEASE HELP!!!

Ответ на: комментарий от erDiZz

я конешно могу понаставлять static

но ?то не выход

область видимости

int var в a.cpp только a.cpp

а bool var в b.cpp только b.cpp

еще раз повоторю, оба файла абсолютно ничем не звязаны, только находяться в одной цели

GANGSTER
() автор топика
Ответ на: комментарий от GANGSTER

>область видимости

>int var в a.cpp только a.cpp

>а bool var в b.cpp только b.cpp

ЕМНИП область видимости _обоих_ имен - глобальная, т.е. программа. Поэтому она и не собирается ("одна цель" == "один бинарь", так? я бы запрещал пользоваться навороченными IDE тем, кто не сдал зачет по make).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

да не знаю я зачем make, я только недавно под Linux

в VC++ 6.0 если у меня главний файл про?кта

например

a.cpp

....

main

{

}

и пока я не включу в нево через include b.cpp, он на него вобще не будет обращать внимания

А вот как дела обстоят в Kdevelop ???

GANGSTER
() автор топика
Ответ на: комментарий от GANGSTER

>да не знаю я зачем make, я только недавно под Linux

>в VC++ 6.0

А я только make и знаю 8)

Что (по моему скромному мнению) происходит: компилируются 2 файла, и в них обоих определен символ var с external linkage (ее имеют все переменные, объявленные в файловой области видимости, если на них нет static). После этого линковщих пытается собрать из этих файлов бинарь, он видит, что символ var имеет разные типы в разных объектных файлах, и ругается.

Ну а если ты делаешь #include "b.cpp", то, хм... это очень плохо для начинающего программиста ;)

tailgunner ★★★★★
()
Ответ на: комментарий от GANGSTER

>и пока я не включу в нево через include b.cpp

мать моя женшина,
забей на C++, бейсик и только бейсик.

anonymous
()
Ответ на: комментарий от GANGSTER

Дядя, ты не из 1С случайно родом? А то я только у них такое <******> видел... А, гоню, еще на студенческих конфах, "кроссплатформенный софт" на Кайликсе.

e
()
Ответ на: комментарий от tailgunner

ну не надо так сосредотачиватся на include b.cpp это я к примеру, я так тоже не делаю

ладно давайте я сформулирую вопрос по другому

почему этот пример компилируется на VC++, но не хочет на KDevelop и как завставить его компильнутся на KDevelop (кроме static)

main.cpp #include "b.h" int var; main { }

b.h пустой

b.cpp #include "b.h" double var;

GANGSTER
() автор топика
Ответ на: комментарий от GANGSTER

>почему этот пример компилируется на VC++

это неправильное поведение компилятора в VC++

>как завставить его компильнутся на KDevelop (кроме static)

а почему static не катит ?

xnix ★★
()
Ответ на: комментарий от GANGSTER

> ладно давайте я сформулирую вопрос по другому

Ты лучше уточни, он не компилируется или не линкуется. ИМХО то, что ты написал, должно компилироваться любым Си++-компилятором, но не должно линковаться вменяемыми линковщиками (почему - я писал).

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

и комплит и линкует, делает работоспобную exe-шку

Я сегодня еще перечитал пару книг по C++, из них можна сделать вывод что оно действительно не должно линковатся.

Так почему тогда VC++ 6.0 не выдает ошибки ???? бррррр

GANGSTER
() автор топика
Ответ на: комментарий от xnix

>Так почему тогда VC++ 6.0 не выдает ошибки ???? бррррр

Предположим, ко всем переменным, объявленным вне тела функции, например,

в VC++ 6.0 добавляется static спецификатор типа по умолчанию. Похоже на правду??

didjim
()
Ответ на: комментарий от kkk

g++ 3.3: multiple definition of `a' isualAge C++ Professional / C for AIX Compiler, Version 6: без проблем

kkk ★★
()
Ответ на: комментарий от GANGSTER

>и пока я не включу в нево через include b.cpp

А-А-А! Мой мозг!

V_L_A_D ★★
()
Ответ на: комментарий от GANGSTER

>Так почему тогда VC++ 6.0 не выдает ошибки ???? бррррр

Потому что M$ делает говно, которому пофигу стандарты. Если хочешь ориентироваться в мире Линукса, надо понимать, что стандарты являются основой всего сущего.

Ay49Mihas ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.