構造体メンバを関数に渡す際にかなりの量の読み込みを行ってきました。しかし、誰かが私が間違っている場所を明確にすることができれば、私はそれを感謝するでしょう。私はこれが何よりもコンパイル順序/定義エラーであると予測しますが、構文エラーもあります。参照による構造体値の変更(潜在的にコンパイル順序の問題)
私が理解しているように、私は構造体のメンバーデータを変更でき、参照(この場合はポインタではありません)として渡すことでコピーを避けることができます。このメソッドは、関数内の個々のメンバーにアクセスするためのドット表記を保持することもできます。
MAIN.CPP:
// include headers
struct foo{
int a;
int b;
}foo_data;
int main(){
foo_data.a = 1; // assign some values to the member in standard format.
foo_data.b = 2;
function(foo_data);
// should this be &foo_data, am I passing by value here as it is
// or is the declaration taking care of that?
}
functions.h:
void function(foo &) // function declaration reference of type foo
functions.cpp:
void function(foo &foo_data) // function definition reference of type foo
{
foo_data.a; // should == 1
foo_data.b; // should == 2
}
誤差は、典型的にはfoo_dataされ、宣言されていない識別子に関連します。私は関数の宣言を伝える必要がありますか?私は構造体、または実際にint(参照?)を渡しています
ありがとう!
こんにちは、これは実際には設計上の問題でした。構造体を.hファイルに移動し、並べ替えを行うとコンパイルできます。 main.objに既に存在する構造体に関連するリンクエラーが発生しました - 検索後、これは複数の.cppファイルが同じインスタンスを使用できないことに関連しています。私の.hで "static struct"を割り当てることはできますが、この構造体をグローバルにすることはできますか? "extern"は同様のエラーを引き起こし、これはベストプラクティスですか?ありがとう! –
@ChrisJones:同じグローバルオブジェクトを別のファイルで共有する必要がある場合は、 'extern'を使用する必要があります。グローバルを使用している場所は表示されません。 –
こんにちは、私のヘッダーファイルがmain.cppに含まれている場合、OR functions.cppはコンパイルしてリンクします。両方のファイルに含まれている場合は、次のリンクエラーが表示されます。functions.obj:エラーLNK2005:main.objで既に定義されている "struct Foo foo_data"(?foo_data @@ 3UFoo @@ A) hはプリコンパイル済みの直後です。 –