我想通過makefile編譯一個程序。當我啓動命令行使編譯器給了我這個錯誤:(類)不會命名一個類型
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;
}
athlete.h
「....」手段:(希望)的代碼不相關的行。
#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
athlete.cpp
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();
}
的makefile
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
讓我知道如果我明白了:A)刪除'using namespace std;' B)只在頭文件中添加'std ::'。 C)你的標準頭文件是什麼意思?我在main.cpp中使用的?感謝您的回答。 – ikeDiM
你會得到大量的''字符串'在刪除所有'使用名稱空間標準符號''**的事件後不會命名類型錯誤,並且您將通過預先加入'std ::'來修復它們。是的,你在main.cpp中擁有的是標準的C++頭文件(除了* .h'之外,那些是C和C++使用'c *'命名)。此外,你應該問自己,如果你需要每一個人。有很多'#include's。 – LogicStuff
感謝它似乎工作。但無論如何我無法完成編譯。現在的問題是:'運動員'不會命名一種類型。我是否需要在這個課程中包含athlete.h(頭文件定義班級運動員)或者有像std ::?這樣的解決方案? – ikeDiM