2016-06-29 6 views
0

私はC++の初心者で、いくつかの初心者コードを実行しようとしています。私は、コードを修正するためにどのようにこの単純なC++プログラムの実行方法は?

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) 

、私はコマンドg++ myTest.cpp -o myTest.outを使ってMac OSでの端末から実行しようとすると

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; 
} 

が、私はターミナルで次のエラーを取得するには、次のファイルを持っていますC++を使い始めるには?私はより多くの情報を-vコマンドを使用して提供することができます、私に必要な場合は教えてください。

+7

C++は、これは助けになるはずですJavaの – datenwolf

+0

ではありません。http://stackoverflow.com/questions/388242/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。あなたはその後、

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

のように、それstatic作る場合、あなた以外のメンバーmain関数は次のようになります。あなたはあなたのプログラムのエントリポイントが必要

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

ありがとう、それは今働いています。なぜ彼らは 'main'をC++のクラスから守っていますか? – Arefe

+3

@Arefe下位互換性が原因の1つです。もう一つは、 'main'関数を持つ複数のクラスと名前空間を持つことができるということです。 –

+0

だから、C++では、いくつかの文字を持つゲームを開発するために複数のクラスを持っている場合でも、出発点は 'main'メソッドがクラスの外にとどまり、それは唯一の出発点になりますか? – Arefe

3

エントリポイントmainは、クラス内にあることはできません。それは正常な機能でなければなりません。

ロジックをクラス内に配置する場合は、main関数でロジックをインスタンスに割り当ててから関数を呼び出します。

1

int main() {}を追加する必要があります。これはエントリポイントであるため、クラス内のメンバー関数を呼び出します。それはクラスまたは構造体の外にある必要があります。

2

すべてのC++プログラムは、main()関数を必要とします。これは、プログラムのロードと初期化直後にC++スタートアップコードが呼び出すものです。だから、あなたはmain()関数を含む.cppファイルを使用してプログラムをリンクする必要があります、

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

} 
+1

コンストラクタは** main()の前に呼び出されます** – vsoftco

関連する問題