我正在Visual中研究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);
        static string CreatePadding(int);
        Block(string);
    protected:
        string BlockContent;
};


我的BlocksContainer.h文件

#pragma once
#include"Block.h"

class BlocksContainer {
    public:
        int GetLength(void);
        Block* GetNBlock(int);
    BlocksContainer(Block**, int);
    protected:
        Block** Blocks;
        int Length;
};


我不知道为什么,但是视觉把我扔了blockscontainer.h(7): error C2143: syntax error : missing ';' before '*'

我是C ++中的newby,找不到错误。在Stack中,我发现了类声明后缺少;的解决方案,但是我有分号。

最佳答案

您不需要:

 #include"BlocksContainer.h"


在block.h内部,此行导致Block在BlocksContainer.h内部未定义,因为编译器尚未看到它。

如果确实需要此类相互依赖的标头,则可以这样声明类:

class Block;


在这样的语句之后,您可以使用Block类,但只能在指针或引用之类的复合语句中使用-这意味着Block* GetNBlock(int);可以编译。

10-08 11:53