在头文件C ++中声明struct

时间:2014-08-07 09:45:14

标签: c++ struct header

我尝试使用结构从函数输出两个值,然后在main中使用。我正在使用头文件来调用要使用的函数。代码正在编译,但我得到的值不正确。我不知道我是否在我的.h文件中声明结构正确或者某些内容被错误地使用了。目前,我的.h文件看起来像:

#ifndef LINEAR_DISPERSION_SOLVER_H
#define LINEAR_DISPERSION_SOLVER_H

//Function for dispersion relation equation
double f (double L, double T, double g, double d);

//Function for derivative of linear dispersion relation 
double df(double L, double T, double g, double d);

//Wave parameter struct definition 

struct wave_parameters {
  double kn;
  double w; 
};

//Linear Dispersion Solver function 
wave_parameters linear_dispersion();

#endif

我的.cpp(不是主要的)的一部分看起来像:

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <iomanip>

using namespace std;

struct wave_parameters {
  double kn;
  double w; 
};
float pi = 3.1415927;

double f(double L, double T, double g, double d) {
  return (g*g);
}

double df(double L, double T, double g, double d) {
  return (1 + ((g*T*T*d)/(L*L)) 
}


struct wave_parameters linear_dispersion () {

.... Deleted code .....

    int choice; 


    cout << "Enter the depth of water ---> ";
    cin >> d;

    cout << "Enter 1 to solve for wave number or 2 to solve for frequency --> ";
    cin >> choice;

    //Calling the wave struct to fill with values 

    struct wave_parameters wave; 

    if (choice == 1) {
      cout << "Enter the value for period ---> ";
      cin >> T; 

.... Deleted code ....

      wave.kn = k; 
      wave.w = omega; 

return wave; 
}

我的主要包含.h文件,并使用:

调用.cpp文件
 struct wave_parameters wave;
 kn = wave.kn;

这是输出多个变量然后使用头文件的正确方法吗?正如你所看到的,我已经两次声明我的结构(一次在我的.h中,一次在我的.cpp文件中),但我这样做是因为我得到了错误。任何帮助真的很感激!

2 个答案:

答案 0 :(得分:3)

肯定只在结构中声明一次结构,理想情况是在标题中。 然后,CPP应包含标题,以便访问该类型。

使用该类型时,不需要编写“struct wave_parameters wave”,你就不需要把int“struct”。

主要看起来像是:

#include "LinearDispersionSolver.h"
int main(int argc, char** argv)
{
  wave_parameters wave;
  wave = linearDisperssion();
  double kn = wave.kn;
}

否则 - 代码看起来还不错。

答案 1 :(得分:1)

你没有证明你在你的.cpp中包含你的.h - 你不需要两次声明结构,所以我建议你先修复它。包括.h并删除.cpp中的声明。

标题中的函数应该具有extern修饰符。

然后在你的主要内容中,我看不出这段代码是如何工作的

struct wave_parameters wave;
kn = wave.kn;

您似乎在声明一个未初始化的结构,然后访问其中一个值。我期待看到对linear_dispersion函数的调用。