为什么我的 C++ 代码无法编译,出现未定义的引用错误
Why won't my C++ code compile, getting undefined reference error
对于我的 class 作业,我们必须使用 class 编写一个 C++ 程序,然后编译它。这些是以下内容。
Snake.h
#ifndef SNAKE_H
#define SNAKE_H
#include <iostream>
using namespace std;
// We need to include string since we need to access it
#include <string>
using std::string;
// Our declaration of our class
class Snake
{
public:
// These are our properties
string color;
double length;
bool venomous;
// Our two constructors, this is basically saying the snake is able to create these datatypes.
// It can either have a default data used or inputted data when called.
Snake()
{
}
// This one has the parameters
Snake(string color, double length, bool venomous)
{
}
// Our functions that we are declaring so we can use them in snake.cpp
// These aren't declared here because we don't have any data yet that they can use
// We also are just telling the code that they are here and that they may or
// may not be called at some point
void display();
void bite();
};
#endif
Snake.cpp
#include <iostream>
#include "Snake.h"
// These creates our data from the header file.
// Snake is seen below with the default data and then Snake with the parameters can be seen.
Snake::Snake()
{
color = "Red";
length = 12.5;
venomous = false;
}
Snake::Snake(string newColor, double newLength, bool newVenomous)
{
color = newColor;
length = newLength;
venomous = newVenomous;
}
// These initalize these functions so that they can be used when we do our dot callback in our main.
void Snake::bite()
{
cout << "This snake bites because he is hungry";
}
void Snake::display()
{
cout << "The color of the snake is: " << color;
cout << "The length of the snake is: " << length;
cout << "Is the snake venomous: " << venomous;
}
main.cpp
#include <iostream>
#include "Snake.h"
using namespace std;
int main()
{
// We create our first snake
Snake snake1;
// Now we need to call method that our object contains
snake1.display();
snake1.bite();
// UI is user input
bool UIVenomous;
string UIColor, isVenomous;
double UILength;
cout << "What color is the snake?" << endl;
cin >> UIColor;
cout << "How long is the snake? " << endl;
cin >> UILength;
cout << "Is the snake venomous? (y/n) " << endl;
cin >> isVenomous;
if (isVenomous == "y")
{
UIVenomous = true;
}
else if (isVenomous == "n")
{
UIVenomous = false;
}
// We now call our class and set our object with the variables from above
Snake snake2(UIColor, UILength, UIVenomous);
// We need to now call our methods that our object has
snake2.display();
snake2.bite();
}
我正在使用 VSCode,当我尝试 运行 构建任务时,它给我这个错误
C:\Users\viens\AppData\Local\Temp\cclzLMka.o: In function `main':
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:10: undefined reference to `Snake::display()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:11: undefined reference to `Snake::bite()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:36: undefined reference to `Snake::display()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:37: undefined reference to `Snake::bite()'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
如果出现 未定义引用错误,通常是因为 .o
文件(从 .cpp
文件创建)不存在并且您的 compiler/build 系统无法 link 它。
您可以在 CLI 中使用它:g++ main.cpp other.cpp etc.cpp
我去掉头文件中的构造函数体后编译正常
/* Snake.h
*/
Snake();
Snake(string color, double length, bool venomous);
对于我的 class 作业,我们必须使用 class 编写一个 C++ 程序,然后编译它。这些是以下内容。
Snake.h
#ifndef SNAKE_H
#define SNAKE_H
#include <iostream>
using namespace std;
// We need to include string since we need to access it
#include <string>
using std::string;
// Our declaration of our class
class Snake
{
public:
// These are our properties
string color;
double length;
bool venomous;
// Our two constructors, this is basically saying the snake is able to create these datatypes.
// It can either have a default data used or inputted data when called.
Snake()
{
}
// This one has the parameters
Snake(string color, double length, bool venomous)
{
}
// Our functions that we are declaring so we can use them in snake.cpp
// These aren't declared here because we don't have any data yet that they can use
// We also are just telling the code that they are here and that they may or
// may not be called at some point
void display();
void bite();
};
#endif
Snake.cpp
#include <iostream>
#include "Snake.h"
// These creates our data from the header file.
// Snake is seen below with the default data and then Snake with the parameters can be seen.
Snake::Snake()
{
color = "Red";
length = 12.5;
venomous = false;
}
Snake::Snake(string newColor, double newLength, bool newVenomous)
{
color = newColor;
length = newLength;
venomous = newVenomous;
}
// These initalize these functions so that they can be used when we do our dot callback in our main.
void Snake::bite()
{
cout << "This snake bites because he is hungry";
}
void Snake::display()
{
cout << "The color of the snake is: " << color;
cout << "The length of the snake is: " << length;
cout << "Is the snake venomous: " << venomous;
}
main.cpp
#include <iostream>
#include "Snake.h"
using namespace std;
int main()
{
// We create our first snake
Snake snake1;
// Now we need to call method that our object contains
snake1.display();
snake1.bite();
// UI is user input
bool UIVenomous;
string UIColor, isVenomous;
double UILength;
cout << "What color is the snake?" << endl;
cin >> UIColor;
cout << "How long is the snake? " << endl;
cin >> UILength;
cout << "Is the snake venomous? (y/n) " << endl;
cin >> isVenomous;
if (isVenomous == "y")
{
UIVenomous = true;
}
else if (isVenomous == "n")
{
UIVenomous = false;
}
// We now call our class and set our object with the variables from above
Snake snake2(UIColor, UILength, UIVenomous);
// We need to now call our methods that our object has
snake2.display();
snake2.bite();
}
我正在使用 VSCode,当我尝试 运行 构建任务时,它给我这个错误
C:\Users\viens\AppData\Local\Temp\cclzLMka.o: In function `main':
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:10: undefined reference to `Snake::display()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:11: undefined reference to `Snake::bite()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:36: undefined reference to `Snake::display()'
c:/Users/viens/OneDrive/Documents/SchoolWork/Lab3/main.cpp:37: undefined reference to `Snake::bite()'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
如果出现 未定义引用错误,通常是因为 .o
文件(从 .cpp
文件创建)不存在并且您的 compiler/build 系统无法 link 它。
您可以在 CLI 中使用它:g++ main.cpp other.cpp etc.cpp
我去掉头文件中的构造函数体后编译正常
/* Snake.h
*/
Snake();
Snake(string color, double length, bool venomous);