为什么“使用命名空间系统;”导致缺少类型说明符?

时间:2013-04-25 20:04:33

标签: namespaces c++-cli system

我正在研究一个似乎做得很好的“董事会”。不知何故,在对其他课程进行了大约一个小时的工作后,董事会在错误方面表现出一些非常奇怪的行为。

//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创建这个控制台应用程序时,这个pragma就在那里,因此在包含“Board.h”之前似乎没有执行任何操作。 我忽略了我的所有其他文件,而且我从未在其他任何地方包括董事会......

编辑2:

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

1 个答案:

答案 0 :(得分:0)

Heureka! 错误在于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;"

无论如何,谢谢你的帮助,无论如何我都不会想到这个:)