компилер не видит метод класса
От: Аноним  
Дата: 07.06.08 19:25
Оценка:
проясните со следующим, пожалуйста:
test.cpp
#include "CTest.h"

int main(){
    
    CTest t;
    t.foo();
    return 0;
}

CTest.h
#ifndef T_H
#define T_H

#include <iostream>

    class CTest{
    public:
        void foo() const;
    };

#endif

CTest.cpp
#include "CTest.h"

void CTest::foo() const{
    std::cout << "CTest::foo()" << std::endl;
}

вроде бы все прозрачно, но при компиляции вылетает еррор:

g++ -Wall -o "test" "test.cpp" (in directory: /home/vasya/projects/test)
/var/tmp//ccN0sL9q.o(.text+0x18): In function `main':
: undefined reference to `CTest::foo() const'
Compilation failed.

не пойму, почему компилер не видит реализацию метода CTest::foo вынесенную в cpp файл??
Re: компилер не видит метод класса
От: Pretender  
Дата: 07.06.08 19:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>g++ -Wall -o "test" "test.cpp" (in directory: /home/vasya/projects/test)

А>/var/tmp//ccN0sL9q.o(.text+0x18): In function `main':
А>: undefined reference to `CTest::foo() const'
А>Compilation failed.
А>
А>не пойму, почему компилер не видит реализацию метода CTest::foo вынесенную в cpp файл??

Потому что этот файл (CTest.cpp) не используется при компиляции.
Re[2]: компилер не видит метод класса
От: Аноним  
Дата: 07.06.08 19:37
Оценка:
Здравствуйте, Pretender, Вы писали:
P>Потому что этот файл (CTest.cpp) не используется при компиляции.

верно! блин, я с этими IDE с ума сойду скоро. непонятно, каким макаром тому же Geany указать чтобы он подхватил все мои сорцы.
Re[3]: компилер не видит метод класса
От: Аноним  
Дата: 07.06.08 19:49
Оценка:
стоп.
а ежели реализацию метода поместить в саму декларацию класса, то все собирается. вот почему так?
Re[4]: компилер не видит метод класса
От: Daevaorn Россия  
Дата: 07.06.08 19:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>стоп.

А>а ежели реализацию метода поместить в саму декларацию класса, то все собирается. вот почему так?

Потому что через `#include` реализация попадает в `test.cpp`
Re[5]: компилер не видит метод класса
От: Аноним  
Дата: 07.06.08 19:59
Оценка:
Здравствуйте, Daevaorn, Вы писали:

D>Здравствуйте, Аноним, Вы писали:


А>>стоп.

А>>а ежели реализацию метода поместить в саму декларацию класса, то все собирается. вот почему так?

D>Потому что через `#include` реализация попадает в `test.cpp`


а почему тогда через этот инклюд сам CTest.cpp не цепляется?
в test.cpp у меня ведь четко прописано #include "CTest.h". это разве не означает что и "CTest.cpp" должен подхватываться? простите за ламерские вопросы, но недопонимаю я этот момент.
Re[6]: компилер не видит метод класса
От: Daevaorn Россия  
Дата: 07.06.08 20:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Daevaorn, Вы писали:


D>>Здравствуйте, Аноним, Вы писали:


А>>>стоп.

А>>>а ежели реализацию метода поместить в саму декларацию класса, то все собирается. вот почему так?

D>>Потому что через `#include` реализация попадает в `test.cpp`


А>а почему тогда через этот инклюд сам CTest.cpp не цепляется?

А>в test.cpp у меня ведь четко прописано #include "CTest.h". это разве не означает что и "CTest.cpp" должен подхватываться? простите за ламерские вопросы, но недопонимаю я этот момент.

Нет, не должен. Вы должны явно указывать при компиляции все файлы реализаций.
Re[7]: компилер не видит метод класса
От: Аноним  
Дата: 07.06.08 20:09
Оценка:
теперь понятно. благодарю.
но неясно почему эта IDE сама не делает за меня все эти действия%)
Re[8]: компилер не видит метод класса
От: LaptevVV Россия  
Дата: 08.06.08 11:48
Оценка:
Здравствуйте, Аноним, Вы писали:

А>теперь понятно. благодарю.

А>но неясно почему эта IDE сама не делает за меня все эти действия%)
Откуда она знает, что ты хочешь включить в проект?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[9]: компилер не видит метод класса
От: Аноним  
Дата: 08.06.08 11:56
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Здравствуйте, Аноним, Вы писали:


А>>теперь понятно. благодарю.

А>>но неясно почему эта IDE сама не делает за меня все эти действия%)
LVV>Откуда она знает, что ты хочешь включить в проект?
ибо, изначально, я создал в ней 'new project', затем создал все эти сорцы, прям в этом проекте. по логике, выходит, что все эти файлы предполагается что IDE должна распознавать как файлы принадлежащие моему проекту --> подхватывать их при линковке и компиляции. ну может, в Geany на этот счет свой взгляд. если так, то мне непонятно, ибо это неудобно ужасно.
Re[10]: компилер не видит метод класса
От: Vamp Россия  
Дата: 09.06.08 13:47
Оценка:
А>ибо, изначально, я создал в ней 'new project', затем создал все эти сорцы, прям в этом проекте.

Да, должна. В этом, собственно, основное предназначение IDE . Будет очень странно, если ваша этого не умеет, так что я советую повнимательнее посмотреть на всякие меню и команды.
Да здравствует мыло душистое и веревка пушистая.
Re[11]: компилер не видит метод класса
От: Аноним  
Дата: 09.06.08 15:20
Оценка:
Здравствуйте, Vamp, Вы писали:

А>>ибо, изначально, я создал в ней 'new project', затем создал все эти сорцы, прям в этом проекте.


V>Да, должна. В этом, собственно, основное предназначение IDE . Будет очень странно, если ваша этого не умеет, так что я советую повнимательнее посмотреть на всякие меню и команды.


в менюхе "Build" есть "Set includes and arguments". в ней следующее:
C source file commands:
Compile: __
Build: __
Execute: __

больше интересного нету ничего.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.