Jump to content
  • Advertisement
Sign in to follow this  
OpenGL_Guru

enumerated types in classes = trouble?

This topic is 4712 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

here is the class i am trying to call from, followed by my call from main and then the error message that i am getting.. is there something i should do? i dont see it... ive never had to deal with enumerated types before in all my years of C++, never really needed to use it.. anyway i appreciate your time! thanks! class
class NcFile
{
  public:

    virtual ~NcFile( void );

    enum FileMode 
	  {
	   ReadOnly,	// file exists, open read-only
	   Write,		// file exists, open for writing
           Replace,	// create new file, even if already exists
	   New		// create new file, fail if already exists
          };

    NcFile( const char * path, FileMode = ReadOnly);// ,
	   // size_t *chunksizeptr = NULL, // optional tuning parameters
	    //size_t initialsize = 0 );

    NcBool is_valid( void ) const;         // opened OK in ctr, still valid
......
} 
from main.cpp
//netcdf reader for use with the GDEM Software...
#include <iostream>
#include <sstream>
#include "netcdfcpp.h"

using namespace std;

int main()
{

 NcFile *a = new NcFile("sspgdemv3s01.nc", NcFile::FileMode = ReadOnly);
 
 return 0;
}
error(s): --------------------Configuration: netcdf_test - Win32 Debug-------------------- Compiling... main.cpp C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\netcdf_test\main.cpp(11) : error C2065: 'ReadOnly' : undeclared identifier C:\Program Files\Microsoft Visual Studio\VC98\MyProjects\netcdf_test\main.cpp(11) : error C2275: 'NcFile::FileMode' : illegal use of this type as an expression Error executing cl.exe. netcdf_test.exe - 2 error(s), 0 warning(s)

Share this post


Link to post
Share on other sites
Advertisement
Guest Anonymous Poster
Hi.

Replace the line
NcFile *a = new NcFile("sspgdemv3s01.nc", NcFile::FileMode = ReadOnly);
by this:
NcFile *a = new NcFile("sspgdemv3s01.nc", NcFile::ReadOnly);
This should do the job.

Ghyslain Abel

Share this post


Link to post
Share on other sites
Like all things that can be defined within a class....scope applies. In the context above you need to use a fully qualified name:


NcFile::FileMode mode = NcFile::ReadOnly;

Share this post


Link to post
Share on other sites
This


NcFile *a = new NcFile("sspgdemv3s01.nc", NcFile::FileMode = ReadOnly);



should be


NcFile *a = new NcFile("sspgdemv3s01.nc", NcFile::ReadOnly);

Share this post


Link to post
Share on other sites
ok i changed the code to what you said, which i have tried before...and this is what i get back from the compiler... WTF??? i am using Visual C++ 6. just if you are wondering... thanks again...

--------------------Configuration: netcdf_test - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall NcFile::NcFile(char const *,enum NcFile::FileMode)" (??0NcFile@@QAE@PBDW4FileMode@0@@Z)
Debug/netcdf_test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

netcdf_test.exe - 2 error(s), 0 warning(s)

Share this post


Link to post
Share on other sites
Hi again.

You must define the constructor:

NcFile::NcFile( const char * path, FileMode ReadOnly )
{
//...
}

The error message said that this function was declared but not defined.

Ghyslain Abel

Share this post


Link to post
Share on other sites
Quote:
Original post by OpenGL_Guru
ok i changed the code to what you said, which i have tried before...and this is what i get back from the compiler... WTF??? i am using Visual C++ 6. just if you are wondering... thanks again...

--------------------Configuration: netcdf_test - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall NcFile::NcFile(char const *,enum NcFile::FileMode)" (??0NcFile@@QAE@PBDW4FileMode@0@@Z)
Debug/netcdf_test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

netcdf_test.exe - 2 error(s), 0 warning(s)

Your linker can't find the NcFile constructor. Have you written a body for it yet? If so, is it included in your project? Perhaps it isn't properly named:

//in your source file
NcFile(char const*, NcFile::FileMode) {
...
}
//rather than
NcFile::NcFile(char const*, NcFile::FileMode) {
...
}

CM

Share this post


Link to post
Share on other sites
well the thing is is i didnt write this code.. i am working on reading in binary data and such through Netcdf format. it was originally a C version but now there is a C++ now and it only comes with a header file that references some old files from the C version. its a lot to read but it might explain better what is happening.

in essence all i have is a .h file but not the implementation of it, which i think is indirectly calling the C style functions from the C version instead of making the user do all the un-necessary calls.


can anyone help?

Share this post


Link to post
Share on other sites
You need the function definitions, either in the form of the source code, or as a library to link with your project, or else that stuff is not going to compile.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!