这是我的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:我是法国人,我的英语不是很好,请回答我是个小孩子啊!
答案 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>