c++ - 为什么这个 C++ 程序在链接未定义的引用错误时出现问题?
问题描述
出于某种原因,我最近在创建具有多个文件的类时遇到了很多麻烦,因为未定义的引用错误不断出现。
这是代码:
卡片.h
class Card {
char name;
public:
char getName();
void setName(char);
Card();
Card(char);
};
卡片.cpp
#include "Card.h"
Card::Card()
{
name = '-';
}
Card::Card(char _name)
{
name = _name;
}
void Card::setName(char _name)
{
name = _name;
}
char Card::getName()
{
return name;
}
主文件
#include <iostream>
#include "Card.h"
int main()
{
std::cout << "Welcome to deck of cards!" << std::endl;
Card card;
card.setName('A');
std::cout << card.getName() << std::endl;
return 0;
}
我通过编译和构建来运行程序:
g++ -c *.cpp
g++ -o Card.o main.o
这是错误:
/usr/bin/ld: main.o: in function `main':
main.cpp:(.text+0x4b): undefined reference to `Card::Card()'
/usr/bin/ld: main.cpp:(.text+0x5c): undefined reference to `Card::setName(char)'
/usr/bin/ld: main.cpp:(.text+0x68): undefined reference to `Card::getName()'
collect2: error: ld returned 1 exit status
我知道这与链接器无法识别方法有关。但是方法是存在的,对吧?
解决方案
而不是g++ -o Card.o main.o
你想要的g++ -o Card Card.o main.o
医生说:
-o <file>
因此,该-o
选项采用输出文件。这会阻止您链接Card.o
。
推荐阅读
- twig - 树枝模板中的未定义变量
- ios - Facebook 表示没有为 IOS 安装 SDK
- flutter - 圆边容器
- macos - 本地主机名称解析突然停止为子域工作
- vue.js - 如何 v-if 路由器链接:当值为空时支持?
- c - 将 C 代码从 POSIX 移植到 Windows(siginfo 问题)
- ios - 路由应用程序覆盖文件的格式不正确。请参考 Apple 的文档
- google-sheets - Google Sheet 按值获取单元格
- c++ - C++ 和 RapidJson:在没有文档的情况下定义值
- amazon-web-services - 抓取谷歌趋势数据时被阻止的问题