Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

dev C++ simple program WAS working, now getting error

Posted on 2008-06-24
9
Medium Priority
?
535 Views
Last Modified: 2013-12-14
I am using Dev C++ and am getting the stated error.  attached is where i include the ConfigFile header that is giving me the grief.

I just can't find an error.  Can someone help?
#include <cstdlib>
#include <iostream>
#include "ConfigFile.h"
#include "Triplet.h"
#include <windows.h>
#include <wininet.h>
#include <string>
#include <fstream>
#include <io.h>
 
using std::string;
using std::cout;
using std::endl;
 
using namespace std;
 
int main(int argc, char *argv[])
{
    //initialize variables
    
    string ssid;
    string ftp_server;
    string username;
    string password;
    string pos_data_loc;
    string pos_data_file;
    string server_file;
    string data_string;
    string prog_call;
    const char* prog_input;
    
    std::time_t now;
    time( &now );
        
    // Load the Config File
	ConfigFile config( "C:/Intelitap/config.inf" );
	
	// Read the various config lines into variables so we can use them in other places	
	//config.readInto( ssid, "ssid" );...

Open in new window

0
Comment
Question by:jamied66
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
  • 2
  • +1
9 Comments
 
LVL 31

Expert Comment

by:Zoppo
ID: 21856125
Hi  jamied66,

the linker mentions the ctor ConfigFile::ConfigFile(sdt::string... cannot be found - either it's not implemented or the file where it's implemented isn't compiled or the generated .obj file cannot be found in the lib-path.

Hope that helps,

ZOPPO
0
 
LVL 40

Expert Comment

by:evilrix
ID: 21856141
>> undefined reference to 'ConfigFile::ConfigFile(sdt::string...
Are you actually building the translation unit that contains the implementation for this class? Have you declared a cosntructor for the class ConfigFile and forgotten to implement it?
0
 
LVL 19

Expert Comment

by:LordOfPorts
ID: 21856179
The error states "...ConfigFile::ConfigFile(sdt::string" sdt::string should be std::string

Check the file ConfigFile.cpp where you define the constructor for the ConfigFile object and change sdt::string to std::string or you could omit it completely since you have using namespace std;
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

Author Comment

by:jamied66
ID: 21856239
I didn't write the ConfigFile library myself, no.
i've attached ConfigFile.cpp.  From what I can see it's in good order.

the above typo (sdt instead of std) was just that. a typo on my part.

Again, all help is appreciated.

Thanks.

// ConfigFile.cpp
 
#include "ConfigFile.h"
 
using std::string;
 
ConfigFile::ConfigFile( string filename, string delimiter,
                        string comment, string sentry )
	: myDelimiter(delimiter), myComment(comment), mySentry(sentry)
{
	// Construct a ConfigFile, getting keys and values from given file
	
	std::ifstream in( filename.c_str() );
	
	if( !in ) throw file_not_found( filename ); 
	
	in >> (*this);
}
 
 
ConfigFile::ConfigFile()
	: myDelimiter( string(1,'=') ), myComment( string(1,'#') )
{
	// Construct a ConfigFile without a file; empty
}
 
 
void ConfigFile::remove( const string& key )
{
	// Remove key and its value
	myContents.erase( myContents.find( key ) );
	return;
}
 
 
bool ConfigFile::keyExists( const string& key ) const
{
	// Indicate whether key is found
	mapci p = myContents.find( key );
	return ( p != myContents.end() );
}
 
 
/* static */
void ConfigFile::trim( string& s )
{
	// Remove leading and trailing whitespace
	static const char whitespace[] = " \n\t\v\r\f";
	s.erase( 0, s.find_first_not_of(whitespace) );
	s.erase( s.find_last_not_of(whitespace) + 1U );
}
 
 
std::ostream& operator<<( std::ostream& os, const ConfigFile& cf )
{
	// Save a ConfigFile to os
	for( ConfigFile::mapci p = cf.myContents.begin();
	     p != cf.myContents.end();
		 ++p )
	{
		os << p->first << " " << cf.myDelimiter << " ";
		os << p->second << std::endl;
	}
	return os;
}
 
 
std::istream& operator>>( std::istream& is, ConfigFile& cf )
{
	// Load a ConfigFile from is
	// Read in keys and values, keeping internal whitespace
	typedef string::size_type pos;
	const string& delim  = cf.myDelimiter;  // separator
	const string& comm   = cf.myComment;    // comment
	const string& sentry = cf.mySentry;     // end of file sentry
	const pos skip = delim.length();        // length of separator
	
	string nextline = "";  // might need to read ahead to see where value ends
	
	while( is || nextline.length() > 0 )
	{
		// Read an entire line at a time
		string line;
		if( nextline.length() > 0 )
		{
			line = nextline;  // we read ahead; use it now
			nextline = "";
		}
		else
		{
			std::getline( is, line );
		}
		
		// Ignore comments
		line = line.substr( 0, line.find(comm) );
		
		// Check for end of file sentry
		if( sentry != "" && line.find(sentry) != string::npos ) return is;
		
		// Parse the line if it contains a delimiter
		pos delimPos = line.find( delim );
		if( delimPos < string::npos )
		{
			// Extract the key
			string key = line.substr( 0, delimPos );
			line.replace( 0, delimPos+skip, "" );
			
			// See if value continues on the next line
			// Stop at blank line, next line with a key, end of stream,
			// or end of file sentry
			bool terminate = false;
			while( !terminate && is )
			{
				std::getline( is, nextline );
				terminate = true;
				
				string nlcopy = nextline;
				ConfigFile::trim(nlcopy);
				if( nlcopy == "" ) continue;
				
				nextline = nextline.substr( 0, nextline.find(comm) );
				if( nextline.find(delim) != string::npos )
					continue;
				if( sentry != "" && nextline.find(sentry) != string::npos )
					continue;
				
				nlcopy = nextline;
				ConfigFile::trim(nlcopy);
				if( nlcopy != "" ) line += "\n";
				line += nextline;
				terminate = false;
			}
			
			// Store key and value
			ConfigFile::trim(key);
			ConfigFile::trim(line);
			cf.myContents[key] = line;  // overwrites if key is repeated
		}
	}
	
	return is;
}

Open in new window

0
 

Accepted Solution

by:
jamied66 earned 0 total points
ID: 21857043
I figured it out myself.  turns out the files were deleted from the project, so they weren't intialzing, even though the files were still there.  

sorry.
0
 
LVL 31

Assisted Solution

by:Zoppo
Zoppo earned 1000 total points
ID: 21857111
That's what I meant with 'the file where it's implemented isn't compiled' ...
0
 
LVL 40

Assisted Solution

by:evilrix
evilrix earned 1000 total points
ID: 21857857
>> I figured it out myself.  turns out the files were deleted from the project, so they weren't intialzing, even though the files were still there.  
Both Zoppo and I pointed this out in the first 2 answers you received. This being the case I see no valid reason to delete this question.
0
 
LVL 31

Expert Comment

by:Zoppo
ID: 21863213
There are objections:

Both evilrix and me gave the hint that it might be the file in question wasn't compiled - that's exactly what jamied66 'figured out' himself ...

Best regards,

ZOPPO
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

IntroductionThis article is the second in a three part article series on the Visual Studio 2008 Debugger.  It provides tips in setting and using breakpoints. If not familiar with this debugger, you can find a basic introduction in the EE article loc…
Many modern programming languages support the concept of a property -- a class member that combines characteristics of both a data member and a method.  These are sometimes called "smart fields" because you can add logic that is applied automaticall…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
Suggested Courses

618 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question