Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
C++Notes
Edit
PageHistory
Diff
Info
LikePages
You are viewing an old revision of this page.
View the current version
.
I (SamJansen) was having a problem after making a C++ shared library. The error produced when I tried to run my application which loaded the library with [dlopen(3)] was: mylibrary.so: undefined symbol: __ti13INetTCPSocket After using [c++filt(1)], we know the undefined symbol is the following: INetTCPSocket type_info node ''InetTCPSocket'' is an abstract base class used as in interface. The reason this error was generated was because one function was not declared as abstract, I had forgotten the '= 0' part of the definition. Another symptom of this is the linker complaining "vtable undefined for class ''x''" ---- !!!std::map<>'s crashing I (PerryLorier) was having a problem after assigning something to a std::map<> the program would crash. My (abbreviated) code: bool operator <(const foo_t &a, const foo_t &b) { if (a.foo < b.foo) return -1; if (a.foo > b.foo) return 1; return 0; } std::map<foo_t,int*> foo_map; ... foo_map[[foo]=new int; *foo_map[[foo]=6; And this code crashed. The reason was that my operator < was wrong. it voilated the contact of a < operator. I changed the "bool operator <" to "int cmp" and then defined operator <: bool operator <(const foo_t &a, const foo_t &b) { return cmp(a,b) < 0; } I also recommend adding some assert(3)'s to verify that your operators don't voilate the rules at runtime. ---- CategoryProgramming
One page links to
C++Notes
:
C++