I'm getting this error creating a new object with KarateMatch new_match; when compiling my Driver.cpp file with g++ Driver.cpp KarateMatch.cpp -o output:
Undefined symbols for architecture x86_64:
"KarateMatch::KarateMatch()", referenced from:
_main in cc5G5Ak8.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
KarateMatch new_match;
I can't figure out what I've done wrong, since I am using #include <KarateMatch.h> on both Driver.cpp and KarateMatch.cpp:
Edit:
I've tried the code as exactly shown on my system (OS X 10.8.1), and this isn't compiling with the same error.
KarateMatch.h
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class KarateMatch{
public:
KarateMatch();
};
KarateMatch.cpp
#include "KarateMatch.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
KarateMatch::KarateMatch(){
cout << "HI";
}
its running fine on my system g++-4.3..
i think its not the problem with KarateMatch.h and KarateMatch.cpp files.
try compiling only Driver.cpp first without including KarateMatch.h file and without creating its object .
Related
recently I've started learning c++. When I tried to write my header file, I got include error. Here is my code:
First is the header file(header.h)
#pragma once
void print(int);
and then is its cpp file(header.cpp)
#include "header.h"
#include <iostream>
using namespace std;
void print(int x){
cout << x << endl;
}
and finally my main cpp program(main.cpp)
#include <iostream>
#include "./header.h"
using namespace std;
int main(){
int x = 123;
print(x);
}
Here is the error, I can't figure out what it's saying orz
cd "/Users/yianchen/Desktop/cpp practice/" && g++ main.cpp -o main &&
"/Users/yianchen/Desktop/cpp practice/"main Undefined symbols for
architecture x86_64: "print(int)", referenced from:
_main in main-90c620.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to
see invocation)
I have searched for some solution, when I use
#include "header.cpp"
It works fine, but I see guys unrecommended using #include some_file.cpp
By the way, I use visual studio code and use code runner. Thanks!
The easiest solution would be to do something like the following
g++ header.cpp main.cpp
This will make sure that the function defined in header.cpp is compiled together with the code that uses it.
Normal usage would be to compile header.cpp, not to include it in another .cpp source. Then the linker will put the pieces together.
I have my main.cc, which is
#include <iostream>
#include "Sally.h"
using namespace std;
int main(){
Sally sallyObject;
sallyObject.printCrap();
}
and header file, Sally.h, which is
#ifndef SALLY_H
#define SALLY_H
class Sally{
public:
Sally();
void printCrap();
protected:
private:
};
#endif //BURRITO_H
and Sally.cc, which is
#include "Sally.h"
#include <iostream>
using namespace std;
Sally::Sally()
{
}
void Sally::printCrap(){
cout << "did someone say steak?" << endl;
}
and those three files are located in same directory.
When I type g++ main.cc, I cannot build the code. It says
Undefined symbols for architecture x86_64:
"Sally::printCrap()", referenced from:
_main in main-16cd07.o
"Sally::Sally()", referenced from:
_main in main-16cd07.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Does anybody know why this is happening?
I believe you need to compile all the .cc files together, because sally.cc isn’t being included.
g++ main.cc sally.cc
Should do the trick.
Including the dot-h file makes the definition of your class visible to all (including main.cc) but the actual body of the code is not seen without it being compiled.
I am trying to include a function called kinematicfactor, written in kinematic_factor.cpp in another program event_rate.cpp.
kinematic_factor.cpp:
#include "kinematic_factor.hpp"
double kinematicfactor (double md) {
double mt = 17.6924; // Mass of Fluorine [GeV/c^2]
double r = 4*mt*md/pow(mt+md, 2);
return r;
}
kinematic_factor.hpp:
#ifndef kinematic_factor_hpp
#define kinematic_factor_hpp
double kinematicfactor (double md);
#endif /* kinematic_factor_hpp */
event_rate:
#include "event_rate.hpp"
#include "kinematic_factor.hpp"
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << kinematic_factor(1.0) << endl;
}
As far as I could check, this was how I was supposed to do it, but I get an error:
Undefined symbols for architecture x86_64:
"kinematicfactor(double)", referenced from:
_main in event_rate-1d17f7.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
What am I doing wrong?
EDIT: I tried
#include "kinematic_factor.cpp"
And it worked. But I heard that including cpp files (and not header files) is a bad practice for learners... What can I do?
How did you compile this program, I am able to compile same program correctly. I suspect it should be linking issue.
You need to compile source together to compile and link.
g++ kinematic_factor.cpp event_rate.cpp -o event_rate
I am learning C++. I have tried linking separate files in an attempt to have a class in a seperate file.
When I build and run the program I get this error message:
Undefined symbols for architecture x86_64:
"Sally::printCrap()", referenced from:
_main in Main-8bfa94.o
"Sally::Sally()", referenced from:
_main in Main-8bfa94.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[Finished in 0.3s with exit code 1]
Here is my code:
Main.cpp
#include <iostream>
#include <string>
#include "Sally.h"
using namespace std;
int main()
{
Sally sallyObject;
Sally *sallyPointer = &sallyObject;
sallyObject.printCrap();
sallyPointer->printCrap();
}
Sally.h
#ifndef SALLY_H
#define SALLY_H
class Sally
{
public:
Sally();
void printCrap();
};
#endif
Sally.cpp
#include "Sally.h"
#include <iostream>
using namespace std;
Sally::Sally()
{
}
void Sally::printCrap(){
cout << "Crap \n";
};
Any help would be greatly appreciated!
Just launch the Terminal application of OS X, then type
cd "/Users/BEASTMACHIENEjr/Desktop/C++ Files" to go to that folder, then type g++ Main.cpp Sally.cpp. This will produce a file called a.out, which you can then launch by typing ./a.out
PS: if you use Sublime Text, I recommend creating a Makefile so you can compile code spanned across multiple source files.
Working on a C++ program using chains and having trouble compiling without really knowing why.
The error I get is:
Undefined symbols for architecture x86_64:
"userInputOutput(linearList*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from:
_main in ccBEoeAc.o
"chain::chain(int)", referenced from:
_main in ccBEoeAc.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
If I use g++ -c main2.cpp, it compiles, but I want to make sure I'm not just covering something up with that option.
Main2.cpp
#include <iostream>
#include "Chain.h"
#include "IOcode.h"
using namespace std;
int main (){
//Call constructor, initial capacity 10
chain *myChain=new chain(10);
//Print initial chain
userInputOutput(myChain, "chain");
}
Chain.cpp
#include "Chain.h"
#include <stdio.h>
#include <iostream>
#include <sstream>
#include "Myexception.h"
using namespace std;
chain::chain(int initialCapacity)
{
cout<<"This method is working"<<endl;
/* if (initialCapacity <1)
{
//throw illegalParameterValue();
}
firstNode=NULL;
listSize=0;
*/
};
IOcode.cpp
#include <iostream>
#include "Linearlist.h"
using namespace std;
void userInputOutput (linearList* l, string dataStructure){
for (int i = 0; i < 13; i++)
l->insert(i, i+1);
cout<<"The initial "<<dataStructure<<" is: ";
l->traverse();
cout<<"welcome to the assignmet 3!"<<endl;
while(true){
//do stuff
}
}
Any idea why I'm getting these errors? The IOcode file was supplied to me, the chain.cpp I created. Sorry for the poor code, new to C++.
You are just compiling one file.
This should be ok for a quick and dirty try :
g++ main2.cpp Chain.cpp IOcode.cpp
although I would add -Wall -Wextra -pedantic -Werror