C 标头文件,架构X86_64的未定义符号
c++ header files, Undefined symbols for architecture x86_64
我正在尝试构建一个将学生成绩存储在C 中的程序。编译时我会收到以下错误:
Undefined symbols for architecture x86_64: "grade1(Student_records const&)", referenced from:
_main in gradereport-a0007a.o
"compare(Student_records const&, Student_records const&)",
referenced from: _main in gradereport-a0007a.o
"read_info(std::__1::basic_istream<char, std::__1::char_traits<char> >&, Student_records&)",
referenced from: _main in gradereport-a0007a.o
ld: symbol(s) not found for architecture x86_64
我一直(尝试)用于编译的命令:g gradereport.cpp
告诉我,关于我的read_info,比较和一年级函数是错误的(定义不当)。但是,我似乎找不到问题。
从阅读有关"未定义符号"问题的先前帖子,看来(a)我的功能声明不匹配,或者(b)我需要"同时"编译多个文件(因为缺乏更好的更好短语)。我很确定不是(a)。如果(b),我将如何精确地完成这项任务?另外,如果有人受到任何基本批评,我很想听听。预先感谢。
这是我的代码:
gradereport.cpp
#include<iostream>
#include<ios>
#include<iomanip>
#include<algorithm>
#include<vector>
#include<stdexcept>
#include "student_records.h"
#include "Grades.h"
using std::cout;
using std::endl;
using std::vector;
using std::cout;
using std::cin;
using std::string;
using std::max;
using std::domain_error;
int main()
{
vector<Student_records> students;
Student_records record;
string::size_type maxlen = 0;
while(read_info(cin, record))
{
maxlen = max(maxlen, record.name.size()); // finds the longest name
students.push_back(record); // enters each record into the vector
}
sort(students.begin(), students.end(), compare);
for(vector<Student_records>::size_type i = 0; i != students.size(); ++i)
{
cout << students[i].name
<< string(maxlen + 1 - students[i].name.size(), ' ');
try
{
double final_grade = grade1(students[i]);
/* need to define grade function:
1) unpack grades;
2) find homework grades;
3) find final grade;
*/
cout << final_grade
}
catch(domain_error e)
{
cout << e.what();
}
cout << endl;
}
return 0;
}
student_records.h
#ifndef GUARD_STUDENT_RECORDS
#define GUARD_STUDENT_RECORDS
#include<iostream>
#include<string>
#include<vector>
struct Student_records
{
std::string name;
double midterm, final;
std::vector<double> homeworks;
};
bool compare(const Student_records&, const Student_records&);
std::istream& read_info(std::istream&, Student_records&);
std::istream& read_homework(std::istream&, std::vector<double>&);
#endif
student_records.cpp
#include "student_records.h"
bool compare(const Student_records& x, const Student_records& y)
{
return x.name < y.name;
}
std::istream& read_info(istream& is, Student_records& s)
{
std::cout << "Enter name, midterm, and final: ";
is >> s.name >> s.midterm >> s.final;
read_homework(std::istream&, std::vector<double>&);
return is;
}
std::istream& read_homework(std::istream& in, std::vector<double>& homework)
{
cout << "Enter homework: ";
if(in)
{
hw.clear()
double x;
while(in >> x)
homework.push_back(x);
in.clear();
}
return in;
}
等级
#ifndef GUARD_GRADES
#define GUARD_GRADES
#include<iostream>
#include<vector>
#include<string>
#include "student_records.h"
double grade1(const Student_records&);
double grade2(double, double, std::vector<double>);
double median(std::vector<double>);
#endif
等级
#include<stdexcept>
#include<vector>
#include "grades.h"
#include "Student_records.h"
using std::domain_error;
using std::vector;
double grade2(double midterm, double final, std::vector<double> homework)
{
double final_homework_grade;
final_homework_grade = median(homework);
return .4 * final_homework_grade + .4 * final + .2 * midterm;
}
double median(vector<double> homework)
{
typedef vector<double>::size_type vec_sz;
vec_sz size = homework.size();
if(size == 0)
throw domain_error("student has done no homework");
sort(homework.begin(), homework.end());
return size % 2 == 0 ? ((homework[mid] + homework[mid + 1]) / 2) : homework[mid];
}
double grade1(const Student_records& s) // unpacks grades
{
return grade2(s.midterm, s.final, s.homework);
}
该论坛已经解决了问题。
出现问题是因为您没有编译所有.CPP或.cc文件,因此编译器无法识别标头文件添加的包含物。
我希望这对某人有帮助。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- C++ 中 dlsym 的未定义符号
- 仅在 MacOS 上析构函数的未定义符号
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 生成文件:体系结构x86_64的未定义符号
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- Xcode"体系结构x86_64的未定义符号"
- 体系结构x86_64的未定义符号:找不到原因
- SWIG链接器:未定义符号:_ZN2cv8fastFreeEPv(cv::fastFree(void*))
- 如何修复架构x86_64的未定义符号,Boost Asio 1.58
- 在Qt5上去静态库:架构的未定义符号x86_64:
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 监视 SDK 下的未定义符号"__Unwind_SjLj_Unregister"
- 使用 Boost/Python 的未定义符号 - 复杂
- 建筑x86_64的未定义符号:"vtkDebugLeaksManager::vtkDebugLeaksManager()",引用自: