河内塔 类

Towers of Hanoi with Classes

我一直收到错误 C2228 left of '.topDisk' must have class/struct/union 并且我不知道它是什么意思,甚至不知道如何修复它,即使经过一些研究。有人可以解释错误是什么以及如何解决吗?我想我已经为您提供了您需要的所有代码。

HanoiPegClass.cpp 文件

//A function moving one disk from one peg to another
void moveDisk(Peg& beginning, Peg& destination)
{
    assert(beginning.getNumDisks() > 0);
    if (destination.getNumDisks() > 0)
    {
        //Where the error is
        assert(beginning.getNumDisks.topDisk() < destination.getNumDisks.topDisk());
    }

    destination.addDisk(beginning.topDisk());
    beginning.removeDisk();
}

Peg.cpp 文件

//Function to return the disk count (amount of discs on each peg)
unsigned int Peg::getNumDisks() 
{
    return diskStack.size();
}

//Function to return the value of the top disk
int Peg::topDisk()
{
    return diskStack.back();    
}

Peg.h 文件

#pragma once
#include <vector>
#include <string>
using namespace std;

class Peg
{

private:
    vector<int> diskStack;
    string pegName;
    void setName(string name);
public:
    Peg(string name, int totalDisks);
    unsigned int getNumDisks();
    void printDisks();
    string getName();
    int topDisk();
    void addDisk(int totalDisks);
    int removeDisk();
    ~Peg();
};

getNumDisks 是一个 returns 无符号整数的函数,因此您不能在其上使用 .。您只能在 structureclassunion 上使用 . 运算符。 所以改变

assert(beginning.getNumDisks.topDisk() < destination.getNumDisks.topDisk());

assert(beginning.topDisk() < destination.topDisk());