(类)没有命名类型

时间:2016-07-26 13:51:41

标签: c++ types include g++

我试图通过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();
}

2 个答案:

答案 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.cppathlete.h之前这样做包含。

答案 1 :(得分:1)

使用std :: string而不是string。