【发布时间】:2011-07-28 15:42:55
【问题描述】:
我在使用 C++ 类时遇到了一些问题。我正在编写一个类(cSpline)来对一组输入点进行三次样条拟合。我想在另一个类中使用 cSpline 对象(ss304,它提供 304 型不锈钢的属性作为温度的函数)。我有四个文件。这是我想出的代码:
cSpline.h:
class cSpline {
private:
double *setCoeffs(double* x_in, double* f_in, int size);
double *coeffs;
double *f;
double *x;
int sizex;
public:
double *interpolate(double* y, int sizey);
cSpline(double* x_in, double* f_in, int size);
};
cSpline.cpp:
cSpline::cSpline(double* x_in, double* f_in, int size) {
f = f_in;
x = x_in;
sizex = size;
coeffs = setCoeffs(x, f, size);
}
double* cSpline::setCoeffs (double* x_in, double* f_in, int size) {
double *ypp = new double[size];
for (int i = 0; i < size; i++) {
ypp[i] = 0.0;
}
return ypp;
}
double* cSpline::interpolate(double* y, int sizey){
double *g = new double[sizey];
for (int i = 0; i < sizey; i++) {
g[i] = 0.0;
}
return g;
}
ss304.h:
#include "cSpline.h"
class SS304 {
private:
// Material constants
static const double T0 = 273.0; // standard temp, K
static const double rho0 = 7924.0; // density at STP, kg/m^3
static const double Tm = 1700.0; // melting temp, K
static const double Hm = 265.3+03; // heat of melting, J/kg
static const double rhom = 7015.0; // density of molten phase at Tm (iron), kg/m^3/K
static const double drdt = -0.883; // temperature coefficient of densiy at Tm, kg/m^3/K
static const double Tv = 3100.0; // vaporization temperature, K
static const double Hv = 6.258e+06; // heat of vaporization, J/kg
// Property Array Sizes
static const int Na1 = 10;
// Property Arrays
double alpha1[Na1]; //thermal expansivity, T0 < T < Tm, 1/K
double Talpha1[Na1];
cSpline csalpha1(double* x, double* f, int size);
public:
double* alpha;
void setProp1D(double* T, int size);
SS304();
};
ss304.cpp:
#include "ss304.h"
SS304::SS304() {
double alpha1[Na1] = {13.6e-6, 16.1e-6, 17.15e-6, 17.8e-6, 18.65e-6, 19.2e-06, 19.85e-06, 20.55e-06, 20.9e-06};
double Talpha1[Na1] = { 200., 400., 500., 600., 700., 800., 1000., 1200., 1400.};
cSpline csalpha1(Talpha1, alpha1, Na1);
}
void SS304::setProp1D(double* T, int size) {
double* alpha = new double[size];
alpha[0] = csalpha1.interpolate(T[0]);
}
我在这里要完成的是:在创建 ss304 对象时,我在给定的一组温度 Talpha1 下设置 304 不锈钢的属性,在本例中为 alpha1。然后我创建一个 cSpline 对象 csalpha1 以供以后使用。 cSpline 对象的创建继续进行并计算样条系数。然后,当我用一组温度调用 SS304::setProp1D 时,它应该根据 T[] 中每个温度的三次样条插值来设置 alpha[] 的值。显然,为了篇幅,我省略了样条的完整实现,但实现与我得到的错误无关,即:
ss304.cpp:在成员函数‘void SS304::setProp1D(double*, int)’中:
ss304.cpp:12: 错误:'((SS304*)this)->SS304::csalpha1' 没有类类型
所以,我认为我对 C++ 中类的工作原理存在一些基本误解。我想我正在尝试像在 Python 中一样使用它们,在那里我可以正常工作。但是,显然我在 C++ 中遗漏了一些东西。我用谷歌搜索了很多,但没有找到任何我理解的帮助。任何帮助将不胜感激。
【问题讨论】: