我的问题是关于定义到类中的变量。我给你看我的问题。
我已经定义了这个类:
class Measure {
int N;
double measure_set[];
char nomefile[];
double T;
public:
void get( );
void printall( );
double mean( );
double thermal_comp( );
};我想让方法做以下工作:
以下是我所做的:
void Measure::get()
{
cout << "Insert filename:" << endl;
cin >> nomefile;
cout << endl;
cout << nomefile << endl;
cout << endl;
int M=0;
int nmax=50;
ifstream f;
f.open(nomefile);
while(M<nmax)
{
f >> measure_set[M];
if(f.eof())
break;
M++;
}
f.close();
N=M+1;
cout << "Insert temperature:" << endl;
cin >> T;
cout << endl;
} 我注意到T是用measure_set[0]记忆的。为什么会发生这种情况,以及如何编写工作代码?我不是C++方面的专家,只为计算目的使用它,虽然我可以以其他方式解决我的问题,我想学习如何在C++中完成这个工作。非常感谢!
发布于 2013-10-27 19:01:32
在C和C++中,在多个作用域中使用同名是合法的--一些编译器(例如gcc -Wshadow)将提供一种机制来警告您这一点,因为它可能会造成混淆。
#include <iostream>
int i = 0;
int main() {
int i = 1;
for (int i = 0; i < 10; ++i) {
int i = 2 * i;
std::cout << i << std::endl;
}
return 0;
}一些编译器会编译它并输出'0,2,4,6,8,.‘。有些人不会。
避免这种情况的一个常见方法是使用前缀。"m_“表示”成员“,"s_”表示“静态”,"g_“表示”全局“等。一些编码样式对成员变量使用"_”后缀。这也有助于防止成员变量与类似名称的getters/setters发生冲突,如果您的骆驼就是这样的话。
class Measure {
int m_n;
double m_measureSet[MEASURE_SET_SIZE]; // [] is not legal in a class.
std::string m_nomefile;
double m_t;
public:
const std::string& nomefile() const { return m_nomefile; }
...
};如果这在使用中得到了回报,我倾向于发现开发人员被鼓励使用访问器而不是成员(在末尾添加()似乎比在开始时输入"m_“要容易)。
std::cout << "Measuring file " << nomefile << std::endl;会变成
std::cout << "Measuring file " << m_nomefile << std::endl;或更好:
std::cout << "Measuring file " << nomefile() << std::endl;发布于 2018-05-03 01:44:58
您对度量值类成员的声明:
double measure_set[];
char nomefile[];正在声明数组,而不声明数组中的元素数。这不是合法的C++,尽管显然有些编译器会支持它。
如果您想要动态大小的数组,或者自己分配和释放数组内存,请使用std::free。
//Declaration
double* measure_set;
//Allocation
unsigned int arrayLen = 10;
measure_set = new double[arrayLen];
//Assigning values to array elements
for(int i = 0; i < arrayLen; ++i) {
measure_set[i] = 0;
}
//Freeing allocated memory
delete[] measure_set;您目前的代码:
measure_set[M];引用未分配任何内存的数组中的数组元素。如果预先分配数组内存,这将是很好的,只要您没有写入超过数组的界限。
对于std::vector (动态大小数组),您可能希望使用push_back或emplace_back函数将值插入到向量中,而不是使用方括号操作符分配值。
此外,在使用向量时,您可能也希望使用备用函数(等等)预先分配基础数组。以避免代价高昂的调整矢量大小的操作。
https://stackoverflow.com/questions/19621785
复制相似问题