我试图通过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>
,&#34;反向预处理器指令&#34;,错误使用{{1在其他头文件中使用using namespace std;
或使用不当。我试图修复看这4点,但没有结果,也许我忽略了一些东西。希望这个问题不会让你烦恼。谢谢。在一些文件块下面&#39;代码(并非包含所有文件)。
的main.cpp
#includes
athlete.h
&#34; ....&#34; 表示:(希望)不相关的代码行。
#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;
}
athlete.cpp
#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();
}
答案 0 :(得分:3)
您需要:
using namespace std;
athlete.h
using namespace std;
main.cpp
移动#include "athlete.h"
现在这些都是非常糟糕的黑客。
string
中限定std::string name
- athlete.h
。 <{1}}在我们处理时并不难打字,所以我不会在任何地方使用std::
。此外,您应using namespace std;
直接向#include
athlete.h
使用相应的标准标题,否则您只需依赖用户athlete.cpp
在athlete.h
之前这样做包含。
答案 1 :(得分:1)
使用std :: string而不是string。