解决了我的“ WorkoutGeneratorMain.cpp”被IDE分类为C ++头文件。我不确定为什么会这样,但我已解决。现在,我要处理所有其他错误。
谢谢大家!
================================================== =
在Visual Studio 2010 Professional中编译程序时,出现以下错误:
------构建开始:项目:WorkoutGenerator,配置:调试Win32 ------
构建开始于2012年8月15日下午12:19:18。
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中的多部分程序还是比较陌生的。我很容易犯一个基本的错误,但是在将我的代码与各种教程和书籍的代码进行比较时,我却找不到它。
我有三个代码文件,如下所示:
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;
}
任何建议,不胜感激。
谢谢,
-亚历克斯
最佳答案
您可能认为int main()
是可执行文件的入口点,但不是(不一定)。 :)根据项目设置,运行时可能会调用wmain
或main
。这就是为什么改用_tmain
的原因,它是一个扩展为运行时期望值的宏。
尝试将其更改为:
int _tmain(int argc, _TCHAR* argv[])
PS-这应该是自动生成的,也许您删除了它而不是替换
_tmain
的内容。