在类中声明字符串类型(C ++)

时间:2015-10-20 16:42:37

标签: c++

这是我的file.h:

 #define MAXCOMPONENTS 20
 #include <string>
 #include <string.h>
 #include <iostream>
 class file{
public:
    file(char const * filename);
    virtual ~file();

    void Takeinfocomponents();
    void Takeshape();

    void Getvalue(int i);
    char *Getcomponents();
    char *Getcolor();


protected:
private:
    char const * filename;
    String shape;
    int value[MAXCOMPONENTS];
    char components[MAXCOMPONENTS];
    char color[MAXCOMPONENTS];

};

我的file.cpp:

 #include <fstream>
 #include <iostream>
 #include <string.h>
 #include <string>
 #include "file.h"
 using namespace std;

 file::file(char const* filename)
 {
     cout << "constructor/fichier:" << filename << endl;
     ifstream fichier(filename,ios::in);
     if(fichier){
         this->filename=filename;
         fichier.close();
         Takeshape();
         Takeinfocomponents();
     }else{
         cout << "File name invalid." << endl;
     }
 }

 file::~file()
 {

 }

 char* file::Getcolor(){
     return this->color;
 }

 char* file::Getcomponents(){
    return this->components;
 }

 void file::Getvalue(int i){
    cout << this->value[i] << endl;
 }


 void file::Takeinfocomponents(){ // pic up name of components, his number and his color
    cout << "Takeinfocomponents/fichier:" << filename << endl;
    ifstream fichier(this->filename,ios::in);
    ifstream stop(this->filename,ios::in);
    string line;
    int i=0;
    getline(fichier,line);
    getline(stop,line);
    getline(stop,line);
    while(line!="/" && i!=99){ // take all informations while the stop signal isn't read
        getline(stop,line);
        fichier >> this->components[i] >> this->value[i] >> this->color[i];
        cout << this->components[i] << this->value[i] << this->color[i] << endl;
        i++;
   }
   fichier.close();
}

void file::Takeshape(){ // pic up the shape in .txt
   cout << "Takeshape" << endl;
   fstream fichier(this->filename,ios::in);
   string shape;
   fichier >> shape;
   this->shape=shape;
   fichier.close();
}

这是从信息(来自.txt)制作图形的大型程序的一部分,这部分用于从.txt中获取信息。

问题来自声明:

 String shape;

他告诉我字符串不是名字类型。我试过一个小小的“s”:

 string shape;

但这不起作用。 我的印象是我错过了一些可以解决问题的小事。 求助。

Notabene:我是法国人,我的英语不是很好,请回答我是个小孩子啊!

3 个答案:

答案 0 :(得分:1)

您必须明确声明命名空间:

std::string shape;

您不应该污染标题中的命名空间,因此using namespace std不是一个选项。

另见question关于命名空间污染。如果您只需要字符串,请使用

using std::string;

在cpp文件中。

答案 1 :(得分:0)

C ++使用namespace的概念。命名空间用于以有意义的方式将类型,变量等组合在一起,而不管这些类型或变量分布在哪个头文件的数量。

在此示例中,字符串类型位于std命名空间内。 std是标准模板库的缩写,它是大多数C ++库类等存储在其中的命名空间。

访问命名空间内部类型的正确方法是namespace::type,因此访问string命名空间内std类型的正确方法是std::string。您也可以编写using namespace std来访问std中的类型,而不必每次都写std::,但在全局范围内执行此操作是个坏主意,因为它会污染全局命名空间。

在您发布的代码中,string shape;出现在using namespace std之前,因为#include "file.h"出现在它之前。因此,它不会生效。

答案 2 :(得分:0)

为了能够使用字符串类并创建字符串对象,您需要包含...

#include <string.h>

...在您的标题文件的顶部。

你不需要......

using namespace std;

与所有STL类一样,字符串类是std命名空间的一部分。如果你不想在每个类名之前编写std ::,你可以简单地说明......

std::string shape;

...在您的标头文件的顶部,以便代替...

string shape;

......你可以简单地使用......

$ cmake -DSWIG_LANGUAGES=java,scala <path to cmake_source_dir>