C++ visualstudio失踪;以前*
我正在研究视觉中的Blake算法,但我有一个小问题 我的C++ visualstudio失踪;以前*,c++,oop,visual-studio-2013,header-files,C++,Oop,Visual Studio 2013,Header Files,我正在研究视觉中的Blake算法,但我有一个小问题 我的Block.h文件 #pragma once #include<string> #include<bitset> #include<iostream> // DEBUG #include"BlocksContainer.h" using namespace std; class Block { public: static void CreateBlocks(string);
Block.h
文件
#pragma once
#include<string>
#include<bitset>
#include<iostream> // DEBUG
#include"BlocksContainer.h"
using namespace std;
class Block {
public:
static void CreateBlocks(string);
static string CreatePadding(int);
Block(string);
protected:
string BlockContent;
};
#pragma once
#include"Block.h"
class BlocksContainer {
public:
int GetLength(void);
Block* GetNBlock(int);
BlocksContainer(Block**, int);
protected:
Block** Blocks;
int Length;
};
我不知道为什么,但VisualThrow我blockscontainer.h(7):错误C2143:语法错误:缺少“;”在“*”之前
<>我是C++的NeWBY,我找不到错误。在堆栈中,我找到了类似缺少的解决方案代码>在类声明之后,但我有分号。您不需要:
#include"BlocksContainer.h"
在block.h内部,此行导致block在BlocksContainer.h内部未定义,因为编译器尚未看到它
如果您确实需要这种相互依赖的头文件,您可以这样声明类:
class Block;
在这样的语句之后,您可以使用Block类,但只能在指针或引用之类的复合语句中使用,这意味着Block*GetNBlock(int)代码>将编译。您不需要:
#include"BlocksContainer.h"
在block.h内部,此行导致block在BlocksContainer.h内部未定义,因为编译器尚未看到它
如果您确实需要这种相互依赖的头文件,您可以这样声明类:
class Block;
在这样的语句之后,您可以使用Block类,但只能在指针或引用之类的复合语句中使用,这意味着Block*GetNBlock(int)代码>将编译。#包括“BlocksContainer.h”是问题所在,它在声明之前使用了Block。@HansPassant那么我必须在哪里声明它呢?您的头文件是相互依赖的。这会导致在尝试引用块时未声明块
。根据您发布的代码,您可以从BlocksContainer.h中删除#include“Block.h”
。@stachu remove#从Block.h中删除#include“BlocksContainer.h”
,和/或在主文件中使用头中的命名空间包含“BlocksContainer.h”而不是“Block.h”,这是一种令人憎恶的做法。还有,为什么要实现自己的动态数组?#问题在于包含“BlocksContainer.h”,它在声明之前使用Block。@HansPassant那么我必须在哪里声明它呢?您的头文件是相互依赖的。这会导致在尝试引用块时未声明块
。根据您发布的代码,您可以从BlocksContainer.h中删除#include“Block.h”
。@stachu remove#从Block.h中删除#include“BlocksContainer.h”
,和/或在主文件中使用头中的命名空间包含“BlocksContainer.h”而不是“Block.h”,这是一种令人憎恶的做法。另外,您为什么要实现自己的动态数组?我在Block.h
中包含blockscocontainer.h
(无论如何构造方法错误),但谢谢您的建议!我在Block.h
中包含BlocksContainer.h
(无论如何构造方法错误),但感谢您的建议!