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

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

Who is Participating?
jamied66Connect With a Mentor Author Commented:
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.  

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,

evilrixSenior Software Engineer (Avast)Commented:
>> 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?
Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

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;
jamied66Author Commented:
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.


// 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);
	: 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 ) );
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 = "";
			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;
				if( nlcopy == "" ) continue;
				nextline = nextline.substr( 0, nextline.find(comm) );
				if( nextline.find(delim) != string::npos )
				if( sentry != "" && nextline.find(sentry) != string::npos )
				nlcopy = nextline;
				if( nlcopy != "" ) line += "\n";
				line += nextline;
				terminate = false;
			// Store key and value
			cf.myContents[key] = line;  // overwrites if key is repeated
	return is;

Open in new window

ZoppoConnect With a Mentor Commented:
That's what I meant with 'the file where it's implemented isn't compiled' ...
evilrixConnect With a Mentor Senior Software Engineer (Avast)Commented:
>> 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.
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,

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.