在c++头文件中声明结构体

Declaring struct in header C++

本文关键字:声明 结构体 文件 c++      更新时间:2023-10-16

我试图使用结构体从函数输出两个值,然后在主程序中使用。我使用头文件来调用要使用的函数。代码正在编译,但我得到的值是不正确的。我不知道我是否在我的。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的一部分(不是main)看起来像:

#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; 
}
然后,我的main包含。h文件,并使用以下命令调用。cpp文件:
 struct wave_parameters wave;
 kn = wave.kn;

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

绝对只声明一次结构体,最好是在头文件中。然后,CPP应该包含头文件,以便访问该类型。

使用该类型时,不需要写"struct wave_parameters wave",也不需要输入"struct"。

main看起来像:

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

您没有显示您在您的。cpp中包含了您的。h -您不应该需要声明该结构两次,所以我建议从解决这个问题开始。包括。h并删除。cpp中的声明。

头文件中的函数应该有外部修饰符。

然后在你的主程序中,我不知道这段代码是如何工作的

struct wave_parameters wave;
kn = wave.kn;

你似乎声明了一个未初始化的结构,然后访问了它的一个值。