我正在尝试通过makefile编译程序。当我从命令行启动make时,编译器给我这个错误:
g++ -Wall -g -c main.cpp -std=c++11
In file included from main.cpp:9:0:
athlete.h:9:9: error: 'string' does not name a type
string name;
我已经尝试搜索,并且发现一些常见问题与缺少其他标题文件中的
#include <string>
,“倒置的预处理程序指令”,错误使用using namespace std;
或错误使用#includes
有关。我试图解决这4点问题,但没有结果,也许是我忽略了某些事情。希望这个问题不会让您感到厌烦。谢谢。在某些文件代码块的下面(不包括所有文件)。main.cpp
#include <iostream>
#include <fstream>
#include <ctime>
#include <iomanip>
#include <string>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include "athlete.h"
#include "upd_at.h"
using namespace std;
int main(){
Athlete f;
f.set_generalities();
f.set_perfind();
f = update_test_res(f);
return 0;
}
运动员
“ ....”表示:(希望)没有相关的代码行。
#ifndef ATHLETE_H_INCLUDED
#define ATHLETE_H_INCLUDED
//declarations of Athlete
class Athlete{
private:
//generalities
string name;
int age;
int height;
double weight;
int tr_exp;
....
public:
....
};
#endif // ATHLETE_H_INCLUDED
运动员
void Athlete::set_generalities(){
string in_name;
int in_age;
int in_height;
double in_weight;
int in_tr_exp;
....
}
void Athlete::set_perfind(){
int in_RHR, in_maxHR;
double in_1rmsq, in_1rmbp, in_1rmcl, in_1rmdl, hndgrp;
....
return ;
}
//create a first txt with athlete generalities and tests column
void create_ath_file(){
// current time/date based on current system
time_t now = time(0);
tm *ltm = localtime(&now);
const char* name_pt = name.c_str();
ofstream myfile;
myfile.open(name_pt);
....
myfile.close();
}
生成文件
p1: main.o upd_athlete.o athlete.o
g++ -Wall -g main.o upd_athlete.o athlete.o -o p1 -std=c++11
main.o: main.cpp athlete.h athlete.cpp upd_at.h upd_athlete.cpp
g++ -Wall -g -c main.cpp -std=c++11
upd_athlete.o: upd_athlete.cpp upd_at.h athlete.cpp athlete.h
g++ -Wall -g -c upd_athlete.cpp -std=c++11
athlete.o: athlete.cpp athlete.h
g++ -Wall -g -c athlete.cpp -std=c++11
clean:
\rm *.o
最佳答案
您需要:
在using namespace std;
中使用athlete.h
在using namespace std;
之前将main.cpp
在#include "athlete.h"
中移动
现在,这些只是非常糟糕的骇客。
在string
中限定std::string name
-athlete.h
。在我们使用std::
时,键入它并不难,所以我不会在任何地方使用using namespace std;
。
另外,您应该直接将#include
适当的标准标头直接添加到athlete.h
,否则,您将仅依靠用户和athlete.cpp
在包含athlete.h
之前这样做。
关于c++ - (类)未命名类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38591788/