2

C# と XAML で Windows 8 用のアプリケーションを作成しています。

AppNamespace という名前空間内に 2 つのクラスを定義しました。これらのクラスの 1 つは、コンストラクター内で 3 次元のブール配列を取ります。

    public class Solver
    {
        // Board is a class also in this namespace but I don't think the issue is 
        //there, so I've omitted it's definition
        private Board current;

        // You can see that the class clearly DOES take a parameter of the same type
        // as the array "content" (which is defined later)
        public Solver (bool[, ,] initial)
        {
            // The parameter is then used to construct a "Board" class within the
            // "Solver" class.
            current = new Board(initial);
        }

        // Several methods within the class
     }

したがって、定義は上で見ることができます。

次に、'NewPage.xaml' という gridapp に新しいページを作成しました。そのページには、配列内の値を操作するテキスト ボックスがいくつかあります。(ここは特に問題ないようです)

次に、「NewPage.xaml.cs」でボタンをクリックすると、クラスにインスタンスが作成され、クラス内でメソッドが実行され、「NewPage.xaml.cs」の上部に 3 次元が定義されます以下に示す配列、

    // Declare the namespace where the class "Solver" is situated
    using App.Classes;

    namespace App
    {
        // So below is the C# part of the page "PuzzleSolver"
        public sealed partial class PuzzleSolver : App.Common.LayoutAwarePage
        { 
            // Create an array called content
            bool[, ,] content = new bool[9, 9, 9];

            public PuzzleSolver()
            {
                this.InitializeComponent();

                //Set every cell of the created content array to true
                for (int i = 0; i <= 8; i++)
                {
                    for (int j = 0; j <= 8; j++)
                    {
                        for (int k = 0; k <= 8; k++)
                        {
                            content[i, j, k] = true;
                        }
                    }
                }
            }

      /* There are some methods which change information in the array "Content" based on the
         stuff input into the XAML textboxes on the page. */


      // The below method is invoked when a XAML Button is clicked on the page
      // and I intend it to create a "Solver" object, using the "content" array
      // from this page as a parameter
      private void Button_Click_1(object sender, RoutedEventArgs e)
      {
        // So now I create the and pass in the "content" array
        Solver newSolve = new Solver(content);

        newSolve.Solve();
      }
}

問題は、コンパイラが「className」がクラスであることを認識しているが、1 つのパラメーターを受け取るコンストラクターがないと言い、次のようにも言うことです。

「ProjectName.className には「メソッドの定義が含まれておらず、タイプ ProjectName.className の最初の引数を受け入れる拡張メソッド「メソッド」が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?」

この情報から私の問題がどこにあるのか誰でも特定できますか?

これを編集して、他の名前空間宣言、最初に "Solver.xaml.cs" の宣言を表示しました。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using App.Classes;

「Solver.xaml」の宣言:

<common:LayoutAwarePage
    x:Name="pageRoot"
    x:Class="App.Solver"
    DataContext="{Binding DefaultViewModel, RelativeSource={RelativeSource Self}}"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App"
    xmlns:common="using:App.Common"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Page.Resources>
        <x:String x:Key="PageName">Solver</x:String>
    </Page.Resources>
4

2 に答える 2

4

objectは予約済みのキーワードであり、変数の名前付けには使用できません。名前を変更してみてください:

className somethingDifferent = new className(content);
somethingDifferent.method();

また、クラス名には Pascal の大文字小文字を使用し、FTLOG ではクラスに「className」以外の名前を付けてください。

于 2012-12-14T20:12:37.307 に答える
2

インスタンスを宣言するときはobject、変数名として使用しています。

className object = new className(content);
object.method();

objectは予約済みキーワードであるため (常に を参照します) 、これによりコンパイラが混乱しSystem.Objectます。

より適切な名前を使用する必要があります。ただし、これが必要な場合@は、予約語を使用できます。

className anyNonReservedWord = new className(content);
anyNonReservedWord.method();

// Alternatively
className @object = new className(content);
@object.method();

method同じ問題が原因である可能性がありますが、コード内での宣言を表示しないため、解読が困難です。


編集後に編集します。

AppNamespace という名前空間内に 2 つのクラスを定義しました

あなたのPuzzleSolverクラスは名前空間Appにあり、ではありませんAppNamespace。の実際の名前空間は表示されませんがSolver、名前空間の不一致であると思われます。

于 2012-12-14T20:16:57.127 に答える