抽象类错误,请参阅声明" "是抽象的



我一直收到此错误,但不确定如何解决它,#include "stdafx.h"

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Puzzle {
public:
virtual bool action(char [][8], int, int) = 0;
virtual void print_solution(char [][8], int) = 0;
};
class Queen8: public Puzzle {
public:
bool action(char Q[][8], int row, int col) {
for (int r = 0; r < row; r++) {
if (Q[r][col] == '1') {
return false;
}
}
for (int r = row, c = col; r >= 0 && c >= 0; r--, c--) {
if (Q[r][c] == '1') {
return false;
}
}
for (int r = row, c = col; r >= 0 && c < 8; r--, c++) {
if (Q[r][c] == '1') {
return false;
}
else {
return true;
}
}
}
void print_solution(char Q[][8], int row) {
if (row == 8)
{
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 8; c++)
cout << Q[r][c] << " ";
cout << endl;
}
cout << endl;
return;
}
for (int c = 0; c < 8; c++) {
if (action(Q, row, c)) {
Q[row][c] = '1';
print_solution(Q, row + 1);
Q[row][c] = '0';
}
}
}
};

int main() {
Puzzle Queen8;
char Q[8][8];
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 8; c++) {
Q[r][c] = '0';
}
}
Queen8.print_solution(Q, 0);
}

确切的错误是:

C:\users\delta\onedrive\documents\Visual Studio 2013\项目\控制台应用程序46\控制台应用程序46\控制台应用程序46.cpp(60(: 错误 C2259:"拼图":无法实例化抽象类

1>由于以下成员:

1>'bool 拼图::action(char [][8],int,int(' : 是抽象的

1>c:\users\delta\onedrive\documents\Visual Studio 2013\项目\控制台应用程序46\控制台应用程序46\控制台应用程序46.cpp(9( :参见"拼图::行动"的声明

1>'void Puzzle::p rint_solution(char [][8],int(' : is 抽象

1>c:\users\delta\onedrive\documents\Visual Studio 2013\项目\控制台应用程序46\控制台应用程序46\控制台应用程序46.cpp(10( :参见"拼图::p rint_solution"的声明

main()函数中,您正在实例化Puzzle类,而不是Queen8类:

Puzzle Queen8;

您应该改为实例化Queen8

Queen8 q;
...
q.print_solution(Q, 0);

除此之外,在覆盖虚拟函数(C++11 及更高版本(时,应始终使用override关键字。这将告诉编译器您的意图,如果您错过了任何内容,它会为您提供更好的警告和错误。因此,在Queen8类中,您应该具有:

bool action(char Q[][8], int row, int col) override {
...
}
void print_solution(char Q[][8], int row) override {
...
}

最新更新