我正在尝试通过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/

10-08 21:31