成员类声明问题

Posted

技术标签:

【中文标题】成员类声明问题【英文标题】:member class declaration issues 【发布时间】:2011-07-27 23:49:15 【问题描述】:

我对班级成员和我的声明有疑问。第一段代码是我的“kdtilemapper.h”头文件

#ifndef _KDTILEMAPPER_H
#define _KDTILEMAPPER_H

#include "tilemapper.h"
#include "kdtree.h"

class KDTileMapper : public TileMapper
public:
    KDTileMapper( const SourceImage & si,const vector<TileImage> & tiles);
    ~KDTileMapper();
    KDTileMapper(const KDTileMapper & rhs);
    KDTileMapper const & operator=(KDTileMapper const & rhs);
    int map_tiles(MosaicCanvas & mosaicOut) const;
private:
;
#endif /* _KDTILEMAPPER_H */

下面的代码段是有问题的编码,asterix 行是我在编译时遇到错误的地方,因为“tiles”没有被声明,“tiles”没有在成员类中。

#include "kdtilemapper.h"
#include "kdtree.h"

KDTileMapper::KDTileMapper(const SourceImage & si, const vector<TileImage> & tiles):TileMapper(si,tiles)

    //TileMapper(si,tiles);
    //tileMapKDT=NULL;

KDTileMapper::~KDTileMapper()



KDTileMapper::KDTileMapper(const KDTileMapper & rhs):TileMapper(rhs)

    source = rhs.source;
    **tiles = rhs.tiles;**  //tiles not declared and not member of const class KDTileMapper

KDTileMapper const & KDTileMapper::operator=(KDTileMapper const & rhs)

    source = rhs.source;
    **tiles= rhs.tiles;** //tiles not declared and not member of const class KDTileMapper
    return *this;

int KDTileMapper::map_tiles(MosaicCanvas & mosaicOut) const
    int check1;
    TileImage tempTile1;
    TileImage tempTile2;
    int rows=source.get_rows();
    int columns=source.get_columns();
    **if(tiles.empty() || rows<0 || colums<0)** //tiles not declared, neither colums
    return -1;
    **KDTree<TileImage>* tileMapKDT= new KDTree<TileImage>(tiles[0].get_num_levels());**
    //tiles above is not declared
    for(int j=0;j< (int)tiles.size();j++)
    
        if(!tiles[j].is_valid())
        return -1;
    
    check1= tileMapKDT->create_tree(tiles);
    if(check1<0)
    return -1;

    mosaicOut=MosaicCanvas(rows,columns);
    for(int i=0;i<rows;i++)
    
        for(int j=0;j<columns;j++)
        
        tempTile1=TileImage(source.get_region_color(i,j));
        tempTile2=tileMapKDT->find_nearest_neighbor(tempTile1);
        mosaicOut.set_tile(i,j,tempTile2);
    

return 0;

【问题讨论】:

tiles 成员在哪里声明?我们应该猜测它在TileMapper 中吗? tiles 变量未在 KDTileMapper 中声明。它是在 TileMapper 中声明的吗?如果是,问题可能出在 TileMapper 中,您可以发布该类的代码吗? 您的编译器似乎表明在范围内没有任何名为 tiles 的声明。我也没有看到类似的东西。这个声明应该在哪里?可以展示一下吗? 【参考方案1】:

您是否在 TileMapper 中将 tiles 声明为私有?如果是这种情况,您应该将其声明为 public 或 protected 以便子类可以访问它。

【讨论】:

以上是关于成员类声明问题的主要内容,如果未能解决你的问题,请参考以下文章

类成员的前向类声明

将声明的枚举转发为类成员变量

如何使用模板声明成员函数? (不是模板类)

为啥类的大小取决于成员声明的顺序?如何?

两个类成员声明和初始化的区别

C ++为什么不能重新声明类成员函数,但可以重新声明普通函数