"неопределенная ссылка на` WinMain @ 16 '"Ошибка в редакторе gcc - PullRequest
0 голосов
/ 05 октября 2018

Я только изучаю c ++ и начал смотреть уроки youtube by thenewboston.К сожалению, он использует Code :: Blocks, в то время как я использую gcc, и у меня нет возможности создавать новые файлы классов одним нажатием кнопки, поэтому пришлось создавать их вручную.

Я не понимаю, почему тот же кодв Code :: Blocks и gcc будет работать в Code :: Blocks, но не в gcc.Требует ли gcc разного кодирования для одного и того же языка?

РЕДАКТИРОВАТЬ: Я сам скачал и протестировал в Code :: Blocks

Другие вопросы говорят о том, как мне нужно дать Windows точку входа, но я не знаю, как это сделать.

Код Test.cpp:

#include <iostream>
#include "ClassTest.h"
using namespace std;

int main() {
  ClassTest bo;
}

Код ClassTest.h:

#ifndef CLASSTEST_H
#define CLASSTEST_H

class ClassTest {
  public:
      ClassTest();
};

#endif // CLASSTEST_H

Код ClassTest.cpp:

#include <iostream>
#include "ClassTest.h"
using namespace std;

ClassTest::ClassTest() {
  cout << "blah blah" << endl;
}

1 Ответ

0 голосов
/ 05 октября 2018

Я не совсем уверен, что понимаю вопрос;Я собираюсь принять это как «как мне заставить эти три файла встроить в .exe файл, который я могу запустить из командной строки Windows?»

Ответ - запустить что-то подобное в командев папке с файлами:

g++ -c Test.cpp -o Test.o
g++ -c ClassTest.cpp -o ClassTest.o
g++ Test.o ClassTest.o -o Test.exe

Первые две команды создают каждый файл CPP в «объектном файле», который сам по себе не является целой программой, но содержит скомпилированную версиюкод в этом файле CPP.Последняя команда говорит компилятору вставить вместе два объектных файла в программу и разрешить все перекрестные ссылки между ними.(Например, часть, в которой Test.cpp конструирует объект ClassTest, должна в конечном итоге вызвать код конструктора ClassTest из ClassTest.cpp.)

Code :: Blocks - это IDE, в которой разрабатывается способ создания каждого источника.файл в вашем проекте и связать их вместе самостоятельно.Но если вы не используете IDE, вам нужно сделать это по-другому.Вы можете сделать это вручную, как это, или написать Makefile , который будет проверять, какие файлы кода были изменены, перестраивать и перекомпоновывать все, что от них зависит, при запуске команды make, котораятак делают большинство людей.

Что касается «предоставления Windows точки входа», то это, вероятно, относится к приложениям с графическим интерфейсом, которые хотят отображать окна на экране.Для консольных программ, подобных той, что вы написали, «точкой входа» является main(), и вы просто печатаете данные в окне командной строки.Чтобы создавать собственные окна с графическим интерфейсом в стиле Windows, вам нужно использовать Windows API, о котором я не могу вам рассказать.

...