私はこの作業をどのようにして行うのがうまくいかないのでしょうか?別の良い質問は「構造体パラメータをC++で渡す」です。私のコードがうまくいかない理由を取得してください。ソースファイル構造体をクラスの引数として使用するC++
// A.cpp
#include "myClass.h"
int main()
{
struct myStruct {
double a;
double b;
};
myStruct structName;
structName.a = 1.1;
structName.b = 2.2;
myClass myClassObject(60.0, structName);
return 0;
}
クラスのヘッダーファイル
// myClass.h
class myClass {
private:
double m_value;
double m_a;
double m_b;
public:
myClass(double value, struct myStruct);
~myClass();
};
とクラス定義
// myClass.cpp
#include "myClass.h"
myClass::myClass(double S, const myStruct &s): m_value(S), m_a(s.a), m_b(s.b) {};
myClass::~myClass(){};
を持つ別のソースファイル、私はエラーのすべての種類を取得、のような:私は、すなわち3つのファイルを持っていますmyClassソースファイルでエラーが表示されます。オーバーロードされた関数のインスタンスがありません。 "myClass :: myClass"は指定された型と一致します。私はcppのソースファイルから
struct myStruct
{
double a;
double b;
};
を削除し、MyClassのヘッダー・ファイルにそれを置く場合
は今、すべてのエラーが離れて行きます。
Q)構造体宣言をmyClassヘッダーファイルに入れ、この構造体を定義する唯一の場所にする必要がありますか?これをコーディングする正しい方法ですか?あなたは2つのソリューション持っ
あなたのコンストラクタシグネチャはヘッダとソースで異なります: 'myClass(double value、struct myStruct)'と 'myClass :: myClass(double S、const myStruct&s)' – nikniknik2016
あなたのクラスはmyStructの外観を知る必要があります。それ以外の場合、コンストラクタのシグネチャは不完全であり、コードに変換できません。だから、ヘッダーに定義する必要があります。 – kamikaze
コンパイル出力ログ全体を投稿するのに役立ちます。 'myClass :: myClassは指定された型と一致します。 'というエラーは、コンストラクタを' myClass(double value、struct myStruct) 'と宣言して実装しますが、これは 'myClass :: myClass(double S、const myStruct&s)'と同じです。 –