簡體   English   中英

在標頭C ++中聲明結構

[英]Declaring struct in header C++

我正在嘗試使用一種結構來從函數中輸出兩個值,然后在主體中使用它。 我正在使用頭文件來調用要使用的函數。 代碼正在編譯,但是我得到的值不正確。 我不知道我是在.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文件中一次聲明),但是我這樣做是因為否則會出錯。 任何幫助都非常感謝!

絕對只一次聲明該結構,最好在標頭中聲明一次。 然后,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;
}

否則-代碼看起來還可以。

您不會顯示自己將.h包含在.cpp中-您不需要兩次聲明該結構,因此我建議先將其修復。 包括.h並刪除.cpp中的聲明。

標頭中的函數實際上應該具有extern修飾符。

然后在您的主體中,我看不到此代碼如何工作

struct wave_parameters wave;
kn = wave.kn;

您似乎正在聲明一個未初始化的結構,然后訪問其值之一。 我期待看到對linear_dispersion函數的調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM