-1

Добрый день! такая проблема, не могу подключить класс и создать бинарник.


test.h
#ifndef _test_h_
#define _test_h_

class test
{
    public:
        test ();
        void show();

    private:

};

#endif

test.cpp
#include "test.h"
#include 


test::test(){}

void test::show(){
    std::cout 

main.cpp
#include "test.h"


int main (int argc, char const* argv[])
{
    test t();
    t.show();
    return 0;
}

g++ -o bin main.cpp выводит /tmp/ccmd32Df.o: In function main': main.cpp:(.text+0x2c): undefined reference totest::test()' main.cpp:(.text+0x3b): undefined reference to `test::show()' collect2: error: ld returned 1 exit status

1 Answers1

4

Дело в том, что вы компилируете только main.cpp, но не test.cpp, и соответсвенно при компоновке компоновщик не находит функцию test::test(), о чем вам и сообщает. По хорошему вы должны скомпилировать каждый .cpp файл в объектный файл (main.cpp -> main.o), если только .cpp файл никуда не подключается через #include, и потом все объектные файлы слинковать в исполняемый. То есть в вашем случае команды будут выглядеть так:

$ gcc -c main.cpp -o main.o # -c говорит GCC создать из файла исходного кода объектный файл
$ gcc -c test.cpp -o test.o
$ gcc main.o test.o -o bin 

Или можно сразу передать компилятору все .cpp файлы и он сам все сделает:

$ gcc main.cpp test.cpp -o bin
Flowneee
  • 3,787