无法从我的cpp文件C ++中的类头中访问私有成员

时间:2014-10-19 19:00:22

标签: c++ class undefined

" Morg.h"

class Morg{
    public:
        void setName( std::string morgName );
        void setType( char morgType );
        void setXcoord( int xLocation );
        void setYcoord( int yLocation );
        void moveMorg( int currDirection );
        void consume( Morg morg );
        void reproduce( char morgType );
        void setBounds( int upperBound );
        void setDirection( int currDirection );
        char getType();

    private:
        std::string Name;
        char Type;
        int yCoord;
        int xCoord;
        int bounds;
        int direction;
};

" Morg.cpp"

#include "masterIncludes.h"
// The above has a bunch of std stuff like list and iostream ect.
#include "Morg.h"


void setName( std::string morgName ){
    Name = morgName; //I get an error here. it thinks `Name` is undefined.
                     //I've tried `Morg::Name` and it stays undefined.
                     // I dont know what im supposed to do.
}
std::string getName(){
    return Name;
}
void setType( char morgType ){}
void setXcoord( int xLocation ){}
void setYcoord( int yLocation ){}
void moveMorg( int currDirection ){}
void consume( Morg morg ){}
void reproduce( char morgType ){}
void setBounds( int upperBound ){}
void setDirection( int currDirection ){}
char getType(){}

我在尝试获取和设置名称或其他任何内容时都会出错,因为它表示未定义,我认为我应该使用标题来避免这种情况所以我想知道我哪里出错了。

BTW:我正在使用MS Visual Studio 2012。

2 个答案:

答案 0 :(得分:2)

你的.h不安全。这是一个带有警卫的版本,并且包括正确的版本,感谢Daniel将其解雇。保持监护人并将您在宣言中使用的图书馆纳入其中是一种很好的行为。

    #IFNDEF __MORG_H
    #DEFINE __MORG_H

    #include <string> 

    //-----------Morg-----------//
     class Morg{
      public:
       void setName( std::string morgName );
       void setType( char morgType );
       void setXcoord( int xLocation );
       void setYcoord( int yLocation );
       void moveMorg( int currDirection );
       void consume( Morg morg );
       void reproduce( char morgType );
       void setBounds( int upperBound );
       void setDirection( int currDirection );
       char getType();

   private:
       std::string Name;
       char Type;
       int yCoord;
       int xCoord;
       int bounds;
       int direction;
  };
  #ENDIF

在您的.cpp文件中,您要做的是:

//  #include "masterIncludes.h" //this is bad habit
 #include "Morg.h"


void Morg::setName( std::string morgName ){
    Name = morgName; //I get an error here it thinks name is undefined I've tried Morg::Name and     it stays undefined I dont know what im supposed to do.
}
std::string getName(){
    return Name;
}
void Morg::setType( char morgType ){

}
void Morg::setXcoord( int xLocation ){

}
void Morg::setYcoord( int yLocation ){

}
void Morg::moveMorg( int currDirection ){

}
void Morg::consume( Morg morg ){

}
void Morg::reproduce( char morgType ){

}
void Morg::setBounds( int upperBound ){

}
void Morg::setDirection( int currDirection ){

}
char Morg::getType(){

}

这应该可以做到!

答案 1 :(得分:0)

函数定义的名称应为

void Morg::setName( std::string morgName ){ Name = morgName; }
std::string Morg::getName(){return Name;}
void Morg::setType( char morgType ){}
void Morg::setXcoord( int xLocation ){}
void Morg::setYcoord( int yLocation ){}
void Morg::moveMorg( int currDirection ){}

等。等

这需要作为Morg类的函数部分,而不是顶级函数,因为它们将是名称限定的。