1

我正在研究一个似乎一切都很好的“板”类。不知何故,在学习其他课程大约一个小时后,Board 在错误方面表现出一些非常奇怪的行为。

//headerfile
#pragma once

using namespace System;

#include "stdafx.h"

ref class Board
{

public:
   Board();
   ~Board();
   void printToConsole();

private:
    array<int^, 2>^ boardData;
};

我为这段代码得到的错误是:

Error   1   error C2143: syntax error : missing ';' before 'using'  e:\users\felix\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\Board.h Line:4 Column:1    ConsoleApplication1 

Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   e:\users\felix\documents\visual studio 2012\projects\consoleapplication1\consoleapplication1\Board.h Line:4 Column:1    ConsoleApplication1

第 4 行是“使用命名空间系统;” 谁能解释我做错了什么?这似乎特别奇怪,因为我有另一个类“模式”,看起来很像这样,但不输出任何错误。

编辑:

所以正如你们中的一些人已经告诉我的那样,分号可能在我之前包含的头文件中丢失。还有一个类似的问题,感谢您发布该问题;)所以现在这是我的stdafx.h(没有评论):

#pragma once
#include "Board.h"
#include "Pattern.h"
#include <string>
#include <iostream>

据我所知,当我用 VS 创建这个控制台应用程序时,这个编译指示就在那里,所以在包括“B​​oard.h”之前似乎没有任何执行过的东西。我忽略了我所有的其他文件,除了这里,我从来没有在其他任何地方包含过董事会......

编辑2:

当我尝试进一步追踪错误时,我注意到缺少“使用命名空间系统;” 在我插入的另一个类中。这导致了一个非常有趣的行为,因为当我在那里使用命名空间 System 时,错误现在位于 stdafx.h 中。如果我不这样做,错误将位于 stdafx.h 中包含的第一个文件中。当我更改文件的顺序时,第一个总是似乎缺少 ; 在“使用”之前......奇怪的事情。

4

1 回答 1

0

赫里卡!错误在于stdafx.cpp,我觉得很奇怪,因为我不记得曾经编辑过它,但是,哦,好吧。

stdafx//.cpp : source file that includes just the standard includes
// ConsoleApplication1.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"

如您所见,“stdafx”被解释为不完整的语句,其中类型说明符和';' 丢失了,因此出现了两个错误。正如评论中的每个人都已经正确告诉我的那样,错误通过包含到其他类而有点向下发送。并显示在第一行真正的代码(不是指令)发生的位置。

链条的工作方式如下:

stdafx.cpp -> stdafx.h -> the first headerfile included in stdafx.h -> "using namespace System;"

无论如何,感谢您的帮助,否则我无论如何都不会想到这一点:)

于 2013-04-26T07:48:24.567 回答