C++ Erreur: ne pas avoir un type de classe

Je vais avoir un peu de difficulté avec des classes C++. Je suis en train d'écrire une classe (cSpline) pour en faire un spline cubique tenir sur un ensemble de points d'entrée. Je veux utiliser un cSpline objet à l'intérieur d'une autre classe (ss304, qui fournit des propriétés de type 304 acier inoxydable en fonction de la température). J'ai quatre fichiers. Voici le code que j'en suis venu avec:

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]);
}

Ce que j'essaie de faire ici est ceci: Lors de la création d'un ss304 objet, je définissez les propriétés de l'inox 304, dans ce cas, alpha1, à un ensemble donné de températures, Talpha1. Puis-je créer un cSpline objet, csalpha1, pour les utiliser plus tard. Création de la cSpline objet va de l'avant et calcule la courbe des coefficients. Puis, quand je l'appelle SS304::setProp1D avec un éventail de températures, il doit définir les valeurs de alpha[] basé sur une interpolation de spline cubique à chaque température T[]. Évidemment, j'en ai laissé la pleine mise en œuvre de la spline pour des raisons d'espace, mais la mise en œuvre n'est pas pertinent pour l'erreur que j'obtiens, qui est:

ss304.cpp: En fonction de membre de ‘void SS304::setProp1D(double*, int)’:

ss304.rpc:12: erreur: ‘((SS304*)this)->SS304::csalpha1’ n'a pas de type de classe

Donc, je pense que j'ai quelques base de l'incompréhension de la façon dont exactement les classes en C++. Je pense que je suis en train de les utiliser comme je le fais en Python, où j'ai cela fonctionne très bien. Mais, évidemment, je suis absent quelque chose en C++. J'ai googlé autour un peu, mais pas trouvé toute l'aide que j'ai compris. Toute aide serait grandement appréciée.

InformationsquelleAutor joelmeans | 2011-07-28