此错误的原因是什么

what is the reason of this error?

本文关键字:是什么 错误      更新时间:2023-10-16

在我的代码中,我想从Album类的方法中使用get_title()但是如果我在客户.cpp中包含"album.h",它会给我这个错误:

error C2036: 'Song *' : unknown size

但现在我有这个错误:

error C2227: left of '->get_title' must point to class/struct/union/generic type
error C2027: use of undefined type 'Album'
IntelliSense: pointer to incomplete class type is not allowed

如何访问Album类的方法?

客户.cpp :

#include "customer.h"
void Customer::print_tmpPurchase()
{
    if (tmpPurchase.get_albums().size() != 0)
    {
        cout << "Albums Of Your Basket: " << endl;
        for (int i = 0; i < tmpPurchase.get_albums().size(); i++)
        {
            cout << "t" << i + 1 << "." << tmpPurchase.get_albums()[i]->get_title() << endl;
        }
    }
}

购买.h :

#ifndef PURCH_H
#define PURCH_H
class Song;
class Album;
class Purchase{
public:
    vector <Song*> get_songs() { return songs; }
    vector <Album*> get_albums() { return albums; }
private:
    vector <Song*> songs;
    vector <Album*> albums;
};
#endif

相册 :

#ifndef ALBUM_H
#define ALBUM_H
class Song;
class Album{
public:
    string get_title() { return title; }
private:
    string title;
    vector <Song> songs;
};
#endif

客户.h :

#ifndef CUST_H
#define CUST_H
class Purchase;
class Customer{
public:
    void print_tmpPurchase();
private:
    Purchase tmpPurchase;
};
#endif

歌曲.h :

#ifndef SONG_H
#define SONG_H
class Album;
class Song{
// . . .
private:
    Album* album;
};
#endif

问题是,当您尝试访问实例的成员时,类定义对编译器不可见。尽管您已经为类提供了前向声明,但这还不够。在访问这些类的成员或需要其大小的 .cpp 和 .h 文件中,您需要包含所有适当的标头,以便其定义在使用时可见。但是,在这种情况下,您的Album类似乎需要Song的定义,而不仅仅是前向声明。

Album.h添加

#include "Song.h"

customer.cpp添加

#include "Album.h'

等等...