2016-08-11 6 views
0

"Tiles"라는 클래스가 있습니다.함수 배열에 객체 전달

public class Tiles 
{ 

    public int cordX, cordY, tileID; 
    Booleans someBooleans; 
    public constructor(int X,int Y,int ID) 
} 

프로그램 타일 클래스의 오브젝트의 배열을 2 차원 그리드 정보를 저장 (XY 위치, tileID)를 생성한다. 이처럼 :

예상대로

tileArray[X + Y] = new Tiles(xPos, yPos, ID); 

지금까지 모든 것이 작동하고있는 객체 배열의 개별 요소의 인스턴스를 두 번을 통해 새로운 개체 배열을

Tiles[] tileArray = new Tiles[totalGridSize]; 

루프를 만듭니다. 하지만 지금은 tileArray의 요소를 함수에 전달하려고합니다. (괜찮 함수가 정적이 가능합니까?)

public static void tileStatusChecker(Tiles x[])<--- 
{  

    Console.WriteLine("Position is {0}X and {1}Y. ID=={2}", x.cordX, x.cordY, x.tileID)  
} 

은 ==이 나에게 오류 제공 : 충분히

Error CS1552 Array type specifier, [], must appear before parameter name

공정, 쉽게 고칠 수 있어야합니다.

public static void tileStatusChecker(Tiles[] x) 
{ 

    Console.WriteLine("Position is {0}X and {1}Y. ID=={2}", x.cordX, x.cordY, x.tileID)  
} 

지금 컴파일러가 날 정말 화가 : CS1061는 '타일 []' 'tileID'없이 확장 방법에 대한 정의를 포함하지 않는 'tileID'형식의 첫 번째 인수를 받아들이는 '타일 [] 찾을 수 있습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) 동시에 컴파일러는 처음에는 배열을 만들지 않았다고 선언하면서 함수를 호출하기 위해 저에게 화를 냈습니다.

CS0103 The name 'tileArray' does not exist in the current context

Tiles.tileStatusChecker(tileArray[7]); 

나는 표준이 전혀 포함되지 않은 내 옆에 있지만, 객체 배열에 책을 "C# 및 Visual Studio를 배울 수"있습니다. 그리고 나는 실제적인 실수가 내가하는 일을 정말로 모르고 있다고 생각합니다. 그래서 누구나 메서드 배열에 개체 배열을 전달하는 방법을 말해 줄 수 있습니까? 코드를 복사 + 붙여 넣기를하고 누군가 나를 위해 고칠 수는 없습니다. stackoverflow에 대한 해결책을 찾으려고했지만 "C# object array to function"을 검색 한 후 10,214 개의 결과가 나왔습니다.

+0

코드 서식을 지정하는 데 시간이 더 걸릴 수 있습니다. 들여 쓰기가 전혀 없으며, 어느 시점에'{'와 같은 줄에 메서드의 본문이 있습니다. 가능한 한 쉽게 질문을 읽으려고 노력해야합니다. –

+1

그러나 전체 배열, 단일 타일을 전달하는 데 정말로 관심이없는 것 같습니다. 'Tiles '를'Tile'로 바꾸면 두 가지 문제를 모두 해결할 수 있습니다. 결국, tileArray [7]의 값은 배열이 아닌'Tiles' 참조이며 ... "배열의 위치"를 출력한다는 아이디어는 의미가 없습니다. 이제는 .NET 명명 규칙을 찾아 볼 좋은 시간이 될 것입니다. –

+0

글쎄, 코드를 포맷하고 질문에 IDE가 표시되도록 IDE를 가져 오는 것이 좋습니다. (부울이 무엇인지 명확하지 않다.) –

답변

1

EDIT : 아내, 사소한 부분을 놓치고 질문에 완전히 답했습니다. 이제는 적절한 접근 자 참조로 함수를 호출 했으므로 실제로 Array에 함수를 전달하지 않으려합니다. Tiles[]이 아닌 을 사용하도록 함수를 다시 작성하는 것이 좋습니다. 코드에서 x이 이 될 것으로 예상하고 함수 선언시 xTiles[]이 될 것으로 예상하기 때문에 모든 문제가 발생합니다.

다음 코드 덩어리는 무시하고 끝까지 메모를 치십시오.

두 번째 샷의 첫 번째 시도보다 더 나은했다 함수에 배열에 나눠 실제로 것,

public static void tileStatusChecker(Tiles[] x) 

하지만 "x.cordX"와 같은 값을 얻기 위해 시도하여 다음 코드를 같이한다 그들을 찾지 못한다 - 배열에는 .CordX가 없다. 타일에는 .CordX가 있습니다. 실제로 Tiles를 얻고 싶다면 x의 첫 번째 (또는 기술적으로 'zeroeth') 요소 인 x [0]을 원할 것입니다. E.G.첫 번째 Tiles의 CordX는 x [0] .CordX가됩니다.

사이드 노트 : 종종 이름을 짓는 문법적 구조에 맞는 이름을 선택하고 코드를 작성하는 데 도움이됩니다. 그것이 객체라면, 보통 Object와 같은 것으로 부릅니다. 클래스가 타일을 나타내는 경우 "타일"보다는 "타일"이라고 부릅니다. 2 차원 배열 주위의 래퍼 (이전에 문자 그대로 사용했던 것처럼)의 컬렉션을 나타내는 두 번째 클래스가있는 경우 다음 타일로 이름을 지정합니다.

+0

예, tileStatusChecker (Tiles [int] x)로 변경하고 함수가 x [int] .cordY에 액세스하는 데이터가 실제로 작동합니다. – Freeman0x5C

+0

나는 그 방법을 넣으려고했는데, "Static"접근자를 너무 많이 사용했기 때문에 어떤 이유로 작동하지 않았을 것입니다. 이제는 내가 처리해야 할 유일한 것은 [CS0119 'Tiles'는 주어진 컨텍스트에서 유효하지 않은 유형입니다] 오류입니다. 실제로 함수를 호출 할 때 오류가 발생합니다. 그러나 이것이 표준 문제 해결 방법입니다. 어쨌든 Thx 많이! 나는 2-3 시간 동안 그곳에 머물렀다. 마침내 나는 새로운 오류 메시지를 Google 수 있습니다. – Freeman0x5C

+0

http://cube-drone.com/comics/c/progress Tiles.functionName (args); functionName이 Tiles 클래스 내에 정의 된 정적 함수 인 경우에만 작동합니다. 행운을 빈다. 도와 줄 수있어서 기뻐. –