あなたのコードには異なるスコープがあります。関数は次のとおりです。
void GaussianElimination::JacobianFiller(){
/* Scope of the function */
// This includes all other blocks of code in the function
if(Krow > 2){
// Still in the scope of the function
}
// More code...
}
次に、関数内に異なるステートメントがあります。私はこれらのブロックがお互いまたは機能を見ないので、機能を除外することを選択しました。彼らは自分のスコープの内部だけを見ています。
if(Krow > 2){
// You've created a local double in this scope
// Accessing a function with an even larger scope
double x = Y(0);
}
同じことは、この声明のために行く:
else if(Krow == 3){
// Local double trying to access a variable outside of its scope
double a = x;
}
は今、以前の機能に述べたように、より大きな範囲を持っています。問題を解決するには、ブロックがdouble xにアクセスできることを確認します。関数のスコープまで移動することで、ダブルにアクセスできます。
void GaussianElimination::JacobianFiller(){
// Create local double in the scope of the function
double x;
if(Krow > 2){
// Since we're still in the scope access the double
x = Y(0);
}
// More code...
}
ではありませんか?最初の 'if'のスコープに' x'を宣言します - それは 'if'ステートメントの外側では見えません - 参照のスコープで読むことができます:http://en.cppreference.com/w/cpp/言語/スコープ – UnholySheep
各中括弧で囲まれた各ブロックに新しいスコープが導入されています。ブロック内の変数は、そのブロックのみに属します(そして、*入れ子*内部ブロック)。外側または並列ブロックは範囲または変数を共有しません。 –
ありがとう、私の問題は、 "double x = Y(0);"を書き換えたくないということです。これは実際には3つのelse if文の5行です。私はそれをクラスのメンバーデータにすることができましたが、メンバーデータオブジェクトの量はすでに巨大です。スコープを拡張する別の方法はありますか? – Toby