0

解決済み私の「WorkoutGeneratorMain.cpp」は、IDEによってC++ヘッダーとして分類されました。なぜそうなったのかわかりませんが、修正しました。これで、他のすべてのバグに対処できるようになりました。

皆さんありがとう!

================================================== =

Visual Studio 2010 Professionalでプログラムをコンパイルすると、次のエラーが発生します。

------ビルド開始:プロジェクト:WorkoutGenerator、構成:DebugWin32------
ビルド開始2012年8月15日12:19:18PM。
InitializeBuildStatus:
  「Debug\WorkoutGenerator.unsuccessfulbuild」をタッチします。
ClCompile:
   LiftClass.cpp
ManifestResourceCompile:
   すべての出力は最新です。
MSVCRTD.lib(crtexe.obj):エラーLNK2019:未解決の外部シンボルメインが機能で参照されています_ _tmainCRTStartup
C:\ Users \ Shanalex \ Documents \ Programming \ C ++ Programming \ WorkoutGenerator \ WorkoutGenerator \ Debug \ WorkoutGenerator.exe:致命的なエラーLNK1120 :1つの未解決の外観

私の検索で、これを修正するためのいくつかのガイドを見つけました。ただし、ほとんどすべての場合、ファイルがコンソール設定に設定されたWindowsアプリケーションであるか、またはその逆であることが示唆されています。私のプログラムはコンソールアプリケーションであり、すべての設定がwin32コンソールアプリケーションに対して正しいように見えます。リンクエラーがある場合もありますが、他の人が抱えているプロジェクト設定の問題はないようです。

私はC++とVS2010のマルチパートプログラムにかなり慣れていません。簡単に基本的な間違いを犯す可能性がありますが、自分のコードをさまざまなチュートリアルや本のコードと比較しても、それを見つけることができませんでした。

次のように、3つのコードファイルがあります。

LiftClass.h

//Lift Classes
//Defines the Lift Class


#ifndef LIFTCLASSHEADER_H_INCLUDED
#define LIFTCLASSHEADER_H_INCLUDED

#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <ctime>

using namespace std;

class Lift
{
public:
    string LName;
    string LType;
    string LBody;
    vector<double> LLoadScale;

    Lift(string Name, string Type, string Body, 
        double Pawn, double Bishop, double Knight, double Rook, double Royal);
};

Lift::Lift(string Name, string Type, string Body, 
    double Pawn, double Bishop, double Knight, double Rook, double Royal)
{
    LName = Name,

    LType = Type,

    LBody = Body,

    LLoadScale.push_back(Pawn),
    LLoadScale.push_back(Bishop),
    LLoadScale.push_back(Knight),
    LLoadScale.push_back(Rook),
    LLoadScale.push_back(Royal);
}


#endif

次に、liftクラスの.cpp実装と、それらをランダム化するための関数があります。

LiftClass.cpp

//Exercise Randomizer using Lift Class
//Initializes Lifts for use in Workout Generator
//Version 2.0 will reference Database

#include "LiftClass.h"

Lift exerciseRandomizer() //Define database of exercise & randomly select one
{    
    vector<Lift> LiftDatabase;

    Lift Clean("Clean", "Olympic", "Full", .33, .66, 1, 1.33, 1.66);
    Lift Bench("Bench Press", "Heavy", "Upper", .33, .66, 1, 1.5, 2);

    LiftDatabase.push_back(Clean);
    LiftDatabase.push_back(Bench);

    srand(static_cast<unsigned int>(time(0))); //Seed random number

    unsigned randomNumber = rand(); //Generate Random Number

    //Get random between 1 and total lift count
    unsigned randomSelector = (randomNumber % LiftDatabase.size()); 

    return LiftDatabase[randomSelector];
}

そして最後に、メイン関数WorkoutGeneratorMain.cppがあります

WorkoutGeneratorMain.cpp

//Workout Generator
//Generates workouts based on goal and fitness level

#include "LiftClass.h"


int main()
{
    exerciseRandomizer();

    Lift LiftA = exerciseRandomizer();

    cout << "\n\nYour first lift is: " << LiftA.LName << "\n\n Its lift type is: " << LiftA.LType << endl;
    cout << "\n\nGood Luck!" << endl;

    system("pause");
    return 0;
}

どんな提案でも大歓迎です。

ありがとう、

-アレックス

4

1 に答える 1

3

それが実行可能ファイルのエントリ ポイントだと思うかもしれませんが、そうでint main()はありません (必ずしもそうではありません)。:) プロジェクトの設定によっては、ランタイムがwmainorを呼び出す場合がありますmain_tmainこれが、代わりに使用する理由です。これは、ランタイムが期待するものに展開されるマクロです。

次のように変更してみてください。

int _tmain(int argc, _TCHAR* argv[])

PS - これは自動的に生成されたはずです_tmain

于 2012-08-15T18:22:08.113 に答える