#2 Ovrscout
Díky za odpověď a za radu. Udělat z proměnné property a breaknout to na ni mě nenapadla, ale funguje to dobře :)
Příspěvky odeslané z IP adresy 94.113.246.–
Zdravím všechny,
potřeboval bych breaknout kód pokud se mě změní proměnná, tzn. ne na určitém řádku, ale na řádku který změnu vyvolal. Snažil jsem se vytvořit Breakpoint pomocí Conditional Expression -> When changed -> název proměnné, ale prostě se mě to nikdy nezastaví i když jsem si jistý, že se hodnota x-krát změnila. Díky za rady :)
Kompiluju to pod VS2010 SP1. Upravil jsem to podle tebe, ale pořád mi to řve na řádku
static XLLCellLogger pl;
Error 2 error C2259: 'Palo::XLL::XLLCellLogger' : cannot instantiate abstract class d:\develop\xladdin\libraries514\paloxll\XLLCellLogger.h 52
a pak na řádku
XLLCellLogger::getInstance().log( AbstractLogger::LOG_WARNING, "Unexpected exception caught! (This should never happen)." );
Error 5 error C2664: 'void Palo::XLL::XLLCellLogger::log(Palo::SpreadsheetFuncs::AbstractLogger::Type,std::string &) throw()' : cannot convert parameter 2 from 'std::string *' to 'std::string &' D:\Develop\XlAddin\libraries514\PaloXLL\SpreadsheetFuncsWrapper.cpp 129
6 IntelliSense: no instance of overloaded function "Palo::XLL::XLLCellLogger::log" matches the argument list d:\develop\xladdin\libraries514\paloxll\spreadsheetfuncswrapper.cpp 128
Tady mě je jasné, že je problém s tím, že se předává string nikoliv reference na string, ale nevím jak to přepsat.
Ještě jednou se omlouvám, je mi jasné, že to co tu řeším jsou asi základy, ale já C++ naposledy viděl asi před 15 lety na vejšce, tak díky za trpělivost :)
Takže jestli to chápu dobře, tak jediná možnost pro mě je, vrátit zpět v AbstractLogger parametr const std::string &msg na const std::string msg, jak to bylo původně. To sice funguje, ale chtěl jsem se tomu vyhnout, protože AbstractLogger je součástí open source řešení, které je aktualizováno a já to budu muset při každé aktualizaci upravovat ve zdrojovém kódu...
Díky za komentáře.
Upravil jsem kód následovně
namespace Palo {
namespace XLL {
class XLLCellLogger : public Palo::SpreadsheetFuncs::AbstractLogger {
public:
XLLCellLogger();
~XLLCellLogger();
static XLLCellLogger& getInstance() {
static XLLCellLogger pl;
return pl;
}
void log( Type t, std::string& msg ) throw();
void log( Type t, std::string& msg, bool force_logging ) throw();
private:
std::ofstream m_log;
};
}
}
protože potřebuji i variantu s 3 parametrem, která se používá dál v kódu.
Ale bohužel mě to vyhází nasledující chyby
Error 1 error C2259: 'Palo::XLL::XLLCellLogger' : cannot instantiate abstract class d:\develop\xladdin\libraries514\paloxll\XLLCellLogger.h 52
Error 2 error C2664: 'void Palo::XLL::XLLCellLogger::log(Palo::SpreadsheetFuncs::AbstractLogger::Type,std::string &,bool) throw()' : cannot convert parameter 2 from 'const char *' to 'std::string &' D:\Develop\XlAddin\libraries514\PaloXLL\c2c_plus_plus.cpp 40
Error 3 error C2259: 'Palo::XLL::XLLCellLogger' : cannot instantiate abstract class d:\develop\xladdin\libraries514\paloxll\XLLCellLogger.h 52
Error 4 error C2259: 'Palo::XLL::XLLCellLogger' : cannot instantiate abstract class d:\develop\xladdin\libraries514\paloxll\XLLCellLogger.h 52
Error 5 error C2511: 'void Palo::XLL::XLLCellLogger::log(Palo::SpreadsheetFuncs::AbstractLogger::Type,std::string,bool) throw()' : overloaded member function not found in 'Palo::XLL::XLLCellLogger' D:\Develop\XlAddin\libraries514\PaloXLL\XLLCellLogger.cpp 68
Error 6 error C2259: 'Palo::XLL::XLLCellLogger' : cannot instantiate abstract class d:\develop\xladdin\libraries514\paloxll\XLLCellLogger.h 52
Error 7 error C2664: 'void Palo::XLL::XLLCellLogger::log(Palo::SpreadsheetFuncs::AbstractLogger::Type,std::string &) throw()' : cannot convert parameter 2 from 'const char [57]' to 'std::string &' D:\Develop\XlAddin\libraries514\PaloXLL\SpreadsheetFuncsWrapper.cpp 128
#2 ondrej39
Díky za odpověď. Já bohužel nemůžu měnit kód v AbstractLogger, protože je v jiné knihovně, jehož kód já nemám pod "kontrolou". Takže potřebuji upravit XLLCellLogger, tak aby fungoval se změnou const std::string &msg. Jak jsem psal nahoře, programuju v C#, ale C++ je pro mě španělská vesnice... :(