Why would the calling function have anything to say?
Quote Selected Text
With very high probability the calling code is wrong (possibly making incorrect assumptions on the called function, it passes the wrong type). Maybe a previous implementation of the library had relaxed checks on calling code correctness.
"In testa che avete, Signor di Ceprano?"
Your compiler should have an option to send the output of the preprocessor into a file. Using Visual C/C++, this option is /P, and the output file has an extension of .i .
Run your code through this, and look for cmath.h in the .i file. Then look for the definition of the round() function. You will see what the compiler thinks the round() function is, and your problem should then be obvious.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-- 6079 Smith W.
If your code looks exactly like posted, compiler will slap you with an error on bData2 line because you don't have a default constructor. You can:
1. Modify the constructor to default to an empty string: BillingDates(std::string InputFile = std::string()) and handle the case when InputFile is the empty string.
2. Create an additional default constructor: BillingDates()
If you need to move data from bData to bData2 you might need a copy constructor: BillingDate (const BillingDate& other).