2

次のコードを使用すると、次のエラーが表示されます: NinjaSteps.cs(16,13): エラー CS0103: The name 'ninja' does not exist in the current context

コンパイルに使用するコマンドラインは次のとおりです。 csc /target:library /reference:C:\Ruby193\lib\ruby\gems\1.9.1\gems\ cuke4nuke-0.4.0\dotnet\Cuke4Nuke.Framework.dll /reference:C:\Fitnesse\FitNesseRo ot\jediwhale-fitsharp-a78d820\binary\tools\nunit\framework\nunit.framework.dll / reference:C:\Users\Rahul\Documents\Visual~1\Projects\ConsoleApplication3\Console Application3\Ninja.dll NinjaSteps.cs

コンパイルしようとしているコードは、Cucumber 自動化テクノロジに関するチュートリアルからのものです。

NinjaSteps.cs:

http://cuke4ninja.com/sec_ninja_survival_net.html

using System;
using System.Collections.Generic;
using System.Text;
using Cuke4Nuke.Framework;
using NUnit.Framework;
using NinjaSurvivalRate;

namespace ConsoleApplication3
{
    class NinjaSteps
    {   [Given(@"^the ninja has a ([a-z]*) level black-belt$")]
        public void TheNinjaHasABlackBelt(String level)
        {   ninja = new Ninja(level);
        }

        [When(@"^attacked by [a\s]*(.*)$")]
        public void AttackedBy(String opponent)
        {
            actions = ninja.AttackedBy(opponent);
        }

        [Then("^the ninja should (.*)$")]
        public void TheNinjaShould(String action)
        {
            Assert.IsTrue(actions.Contains(action));
        }

    }
}

Ninja.cs は以下のとおりで、Ninja.dll にコンパイルされています。

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Text;

namespace NinjaSurvivalRate
{
    public class Ninja
    {
        public Ninja(String beltLevel)
        {

        }
        public List<String> AttackedBy(String opponent)
        {
            if ("Chuck Norris" == opponent)
                return new List<string>(
                  new String[] { "run for his life" });
            else
                return new List<string>(
                  new String[] { "engage the opponent" });
        }
    }
}

回答とフィードバックをお待ちしております。同様のスレッドをたどってみると、解決策はケースバイケースであり、一貫した根本原因ではないことがわかり、原因を理解するために正確なコードの詳細を詳述する必要があると感じました. お時間とご協力をいただければ幸いです。ありがとう。

4

2 に答える 2

1

変数が定義されていませんninja。必要なもの:

var ninja = new Ninja(level);

アクションについても同じことを行います。

編集:

実際、意図を正しく理解していれば、両方の変数はクラス自体のフィールド/プロパティであると想定されています。

于 2012-09-30T06:02:49.887 に答える
0

チュートリアルは、すべての履歴を示しているわけではありません。ソース コードに移動すると、メソッドで初期化された(既にある)ninja宣言されたフィールドが実際にあることがわかります。TheNinjaHasABlackBelt

于 2012-09-30T06:32:39.240 に答える