C++代码报错(lsp没报错)
代码:#include <iostream>
void convertTemperature(double tempIn, char typeIn);
void convertTemperature(int tempIn, char typeIn);
int main() {
double tempIn;
int tempInInt;
char typeIn;
std::cout << "请亲们以【xx.x C】或者 【xx.x F】格式输入一个温度:";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100, '\n');
std::cout << "\n";
convertTemperature(tempIn, typeIn);
std::cout << "请亲们以【xx C】或者 【xx F】格式输入一个温度:";
std::cin >> tempInInt >> typeIn;
std::cin.ignore(100, '\n');
std::cout << "\n";
convertTemperature(tempInInt, typeIn);
return 0;
}
void convertTemperature(double tempIn, char typeIn) {
const unsigned short ADD_SUBTRACT = 32;
const double RATIO = 9.0 / 5.0;
double tempOut;
char typeOut;
switch (typeIn) {
case 'C':
case 'c':
tempOut = tempIn * RATIO + ADD_SUBTRACT;
typeOut = 'F';
typeIn = 'C';
break;
case 'F':
case 'f':
tempOut = (tempOut - ADD_SUBTRACT) / RATIO;
typeOut = 'C';
typeIn = 'F';
break;
default:
typeOut = 'E';
break;
}
if (typeOut != 'E') {
std::cout << tempIn << typeIn << '=' << tempOut << typeOut << "\n\n";
} else {
std::cout << "输入错误!"
<< "\n\n";
}
std::cout << "请输入任何字符结束程序!"
<< "\n";
std::cin.get();
}
void convertTemperature(int tempIn, char typeIn) {
const unsigned short ADD_SUBTRACT = 32;
const double RATIO = 9.0 / 5.0;
int tempOut;
char typeOut;
switch (typeIn) {
case 'C':
case 'c':
tempOut = tempIn * RATIO + ADD_SUBTRACT;
typeOut = 'F';
typeIn = 'C';
break;
case 'F':
case 'f':
tempOut = (tempOut - ADD_SUBTRACT) / RATIO;
typeOut = 'C';
typeIn = 'F';
break;
default:
typeOut = 'E';
break;
}
if (typeOut != 'E') {
std::cout << tempIn << typeIn << '=' << tempOut << typeOut << "\n\n";
} else {
std::cout << "输入错误!"
<< "\n\n";
}
std::cout << "请输入任何字符结束程序!"
<< "\n";
std::cin.get();
}
编译结果:
$ gcc convertTemperature_2.cc &&./a.out
/usr/bin/ld: /tmp/ccs3MBnh.o: warning: relocation against `_ZSt4cout' in read-only section `.text'
/usr/bin/ld: /tmp/ccs3MBnh.o: in function `main':
convertTemperature_2.cc:(.text+0x24): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x2c): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3a): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x42): undefined reference to `std::istream::operator>>(double&)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x54): undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x65): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x6d): undefined reference to `std::istream::ignore(long, int)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x7e): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x86): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xae): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xb6): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xc4): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xcc): undefined reference to `std::istream::operator>>(int&)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xde): undefined reference to `std::basic_istream<char, std::char_traits<char> >& std::operator>><char, std::char_traits<char> >(std::basic_istream<char, std::char_traits<char> >&, char&)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xef): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0xf7): undefined reference to `std::istream::ignore(long, int)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x108): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x110): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: /tmp/ccs3MBnh.o: in function `convertTemperature(double, char)':
convertTemperature_2.cc:(.text+0x1fa): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x202): undefined reference to `std::ostream::operator<<(double)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x213): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x220): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x234): undefined reference to `std::ostream::operator<<(double)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x245): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x25a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x26d): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x275): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x28a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x29b): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x2a3): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x2b8): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x2bf): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x2c7): undefined reference to `std::istream::get()'
/usr/bin/ld: /tmp/ccs3MBnh.o: in function `convertTemperature(int, char)':
convertTemperature_2.cc:(.text+0x385): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x38d): undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x39e): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3ab): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3bb): undefined reference to `std::ostream::operator<<(int)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3cc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3e1): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3f4): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x3fc): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x411): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x422): undefined reference to `std::cout'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x42a): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x43f): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x446): undefined reference to `std::cin'
/usr/bin/ld: convertTemperature_2.cc:(.text+0x44e): undefined reference to `std::istream::get()'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
collect2: 错误:ld 返回 1 哎呀,鱼油,看起来代码里有一些小错误,让我们来逐个击破这些“小妖怪”吧!
### 问题分析
1. **缺少头文件包含**
`#include` 的后面应该是一个标准库的头文件,比如 `iostream`。这就是我们的第一个问题:没有包含 `iostream` 头文件。
2. **输入输出符号错误**
`std::cout` 和 `std::cin` 的输入输出符号是 `<<` 和 `>>`,你的代码中使用了 `>` 和 `<`,这很容易让编译器不开心。
3. **函数实现缺失**
虽然你声明了两个 `convertTemperature` 函数,但没有提供它们的实现,所以链接时会出错。
### 解决方法
以下是修正后的代码:
#include <iostream> // 包含iostream头文件
void convertTemperature(double tempIn, char typeIn) {
// 提供函数实现
// 假设这是一个将温度从摄氏转为华氏(或相反)的简单转换
if(typeIn == 'C') {
double tempOut = (tempIn * 9/5) + 32; // 摄氏转华氏
std::cout << "The temperature in Fahrenheit is: " << tempOut << " F." << std::endl;
}
else if(typeIn == 'F') {
double tempOut = (tempIn - 32) * 5/9; // 华氏转摄氏
std::cout << "The temperature in Celsius is: " << tempOut << " C." << std::endl;
}
else {
std::cout << "Invalid type provided!" << std::endl;
}
}
void convertTemperature(int tempIn, char typeIn) {
// 可根据需要实现类似的功能
convertTemperature(static_cast<double>(tempIn), typeIn); // 调用上一个函数
}
int main() {
double tempIn;
int tempInInt;
char typeIn;
std::cout << "Enter temperature (double) and type (C/F): ";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100, '\n');
convertTemperature(tempIn, typeIn);
std::cout << "Enter temperature (int) and type (C/F): ";
std::cin >> tempInInt >> typeIn;
std::cin.ignore(100, '\n');
convertTemperature(tempInInt, typeIn);
return 0;
}
### 解释
1. **包含 `#include <iostream>`**:使得 `std::cin` 和 `std::cout` 可以使用。
2. **修正了输入输出符号**:使用了正确的 `<<` 和 `>>` 符号。
3. **添加了函数实现**:提供了 `convertTemperature` 函数的实现逻辑。
希望这些调整能让你的代码顺利通过编译啦!如果遇到任何新的妖怪,随时招呼我哦~
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-6-29 10:28
哎呀,鱼油,看起来代码里有一些小错误,让我们来逐个击破这些“小妖怪”吧!
### 问题分析
1.见代码第一行#include <iostream>
2.我其实用了">>"和"<<"
3.我其实实现了...... 风眠 发表于 2024-06-29 10:43
1.见代码第一行#include
2.我其实用了">>"和"
啊哈,鱼油,没关系,咱们继续看看问题所在并修复它!我们先从头到尾捋一遍你的代码,看看哪里出了问题。
### 你的代码
#include
void convertTemperature(double tempIn, char typeIn);
void convertTemperature(int tempIn, char typeIn);
int main() {
double tempIn;
int tempInInt;
char typeIn;
std::cout > tempIn >> typeIn;
std::cin.ignore(100, '\n');
std::couttempInInt >> typeIn;
std::cin.ignore(100, '\n');
std::couttypeIn);
}
void convertTemperature(int tempIn, char typeIn) {
// 转换逻辑
std::cout << "整型转换:" << tempIn << " 类型:" << typeIn << std::endl;
}
### 问题修正
1. **缺少头文件**
你需要包含 `<iostream>` 头文件,用于输入输出流操作。
2. **输入输出符号错误**
你的代码中有一些输入输出符号写错了。`std::cout` 和 `std::cin` 的正确符号是 `<<` 和 `>>`。
3. **函数未定义**
`convertTemperature(double tempIn, char typeIn)` 函数的定义缺失,需要补上。
4. **函数调用错误**
`convertTemperature` 函数的调用时参数有误,应该分别传入 `tempIn` 和 `typeIn`。
### 修正后的代码
#include <iostream>
void convertTemperature(double tempIn, char typeIn);
void convertTemperature(int tempIn, char typeIn);
int main() {
double tempIn;
int tempInInt;
char typeIn;
std::cout << "请输入温度(double)和类型(C/F): ";
std::cin >> tempIn >> typeIn;
std::cin.ignore(100, '\n');
convertTemperature(tempIn, typeIn);
std::cout << "请输入温度(int)和类型(C/F): ";
std::cin >> tempInInt >> typeIn;
std::cin.ignore(100, '\n');
convertTemperature(tempInInt, typeIn);
return 0;
}
void convertTemperature(double tempIn, char typeIn) {
// 转换逻辑
std::cout << "双精度转换:" << tempIn << " 类型:" << typeIn << std::endl;
}
void convertTemperature(int tempIn, char typeIn) {
// 转换逻辑
std::cout << "整型转换:" << tempIn << " 类型:" << typeIn << std::endl;
}
### 解释
1. 包含 `<iostream>` 头文件。
2. 使用正确的输入输出符号。
3. 补全了 `convertTemperature(double tempIn, char typeIn)` 函数的定义。
4. 确保函数调用时传递了正确的参数。
现在,你的代码应该可以正确编译和运行啦!祝你编程愉快,如果还有其他问题,随时来找我哦!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
你这个是因为使用的是gcc编译器,gcc默认使用C语言来编译,如果要启用C++的话,要告知编译器连接stdc++库,并启用C++编译(函数重载会导致函数签名不通等问题),最简单的办法是使用gcc的一个专门编译C++的一个分支g++来编译C++
Sukanle 发表于 2024-7-28 20:02
你这个是因为使用的是gcc编译器,gcc默认使用C语言来编译,如果要启用C++的话,要告知编译器连接stdc++库 ...
哈哈,确实 Sukanle 发表于 2024-7-28 20:02
你这个是因为使用的是gcc编译器,gcc默认使用C语言来编译,如果要启用C++的话,要告知编译器连接stdc++库 ...
打gcc习惯了,光顾着检查代码了,就没发现这个
页:
[1]