2016-06-29 2 views
0

Я начинаю на C++ и пытаюсь запустить код стартера. У меня есть следующие файлы,Как запустить эту простую программу на C++?

myTest.h 
//////// 

#ifndef __myTest_h__ 
#define __myTest_h__ 

#include <string> 

using std::string; 

class myTest{ 

public:  
    int main(int, char const**); 
}; 

#endif // __myArray_h__ 



myTest.cpp 
////////// 


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



int myTest::main(int argc, char const *argv[]) 
{ 

    std::cout<< "Hello World/n"; 
    return 0; 
} 

Когда я пытаюсь запустить из терминала в Mac OS с помощью команды g++ myTest.cpp -o myTest.out, я получаю следующее сообщение об ошибке в терминале,

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
    implicit entry/start for main executable 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Как исправить код начать с C++? Я могу предоставить дополнительную информацию, используя команду -v, пожалуйста, дайте мне знать, если это необходимо.

+7

C++ не Java – datenwolf

+0

Это должно быть полезным: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – user2079303

ответ

13

В отличие от Java или C# у вас не может быть функция main в классе, она должна быть глобальной функцией, не являющейся членом.


Вы можете сделать очень простую main функцию, которая затем вызывает вашу функцию член main функции:

int main(int argc, char* argv[]) 
{ 
    myTest myTestObject; 
    return myTestObject.main(argc, argv); 
} 

Обратите внимание, что мне нужно, чтобы создать экземпляр myTest класса, это происходит потому, что функции myTest::main не сделан static. Если вы сделаете это static, как

class myTest 
{ 
public: 
    static int main(int, char *[]); 
    ... 
}; 

, то ваш не-член main функция может выглядеть следующим образом:

int main(int argc, char* argv[]) 
{ 
    return myTest::main(argc, argv); 
} 
+0

Спасибо, теперь он работает. Почему они сохраняют «основной» вне класса на C++? – Arefe

+3

@Arefe Обратная совместимость - одна из причин. Другим является то, что у вас может быть несколько классов и пространств имен, каждая из которых имеет функцию «main», которая затем должна использоваться? –

+0

Итак, в C++ отправной точкой будет метод 'main', который останется в классе, и это будет единственной отправной точкой, даже если у нас будет несколько классов, например, для разработки игры с несколькими символами? – Arefe

3

Ваша точка входа main Функция не может быть внутри класса. Это должна быть нормальная функция.

Если вы хотите поместить свою логику внутри класса, то ваша функция main выделит экземпляр, а затем вызовет в нем функцию.

1

Вам нужна точка входа для вашей программы. Вы должны добавить int main() {}, потому что это ваша точка входа, а затем вызывается функция-член в вашем классе. Он должен быть вне класса или структуры.

2

Для каждой программы на C++ нужна функция main(), которая запускает код запуска C++ сразу после загрузки и инициализации вашей программы. Таким образом, вы должны связать свою программу с .cpp файл, содержащий основную функцию(),

int main(int argc, char const *argv[]) 
{ 

} 
+1

Конструкторы вызываются до ** main() ** – vsoftco

Смежные вопросы