【发布时间】:2019-01-22 22:20:41
【问题描述】:
使用 C++ 和 Xcode 我总是遇到链接器命令失败的问题。我不知道这是什么意思。我正在创建一个包含 3 个文件的基本程序。一个 main.cpp 和一个带有头文件的类文件。主文件为空。其他两个是这样的:
student.hpp:
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
#include <sstream>
std::string line;
class Student{
public:
std::string fullName;
int projectGrade;
int quizGrade;
int midtermGrade;
int finalGrade;
int finish;
int start = 14;
std::string getStudentName();
int getProjectGrade();
int getQuizGrade();
int getMidtermGrade();
int getFinalGrade();
double getOverallGrade();
bool login(std::string username, std::string password);
bool login(std::string username);
};
student.cpp:
#include "student.hpp"
std::string Student::getStudentName(){
finish = line.find("\t", start);
fullName = line.substr(start, finish);
return fullName;
}
int Student::getProjectGrade(){
start = line.find("\t", start) + finish;
finish = start + 2;
std::stringstream stream(line.substr(start, 2));
stream >> projectGrade;
return projectGrade;
}
int Student::getQuizGrade(){
start+=3;
std::stringstream stream(line.substr(start, 2));
stream >> quizGrade;
return quizGrade;
}
int Student::getMidtermGrade(){
start+=3;
std::stringstream stream(line.substr(start, 2));
stream >> midtermGrade;
return midtermGrade;
}
int Student::getFinalGrade(){
start+=3;
std::stringstream stream(line.substr(start, 2));
stream >> finalGrade;
return finalGrade;
}
double Student::getOverallGrade(){
return round((projectGrade + quizGrade + midtermGrade + finalGrade)/40)*10;
}
bool Student::login(std::string username, std::string password){
std::ifstream studentFile;
studentFile.open("/Users/griffin/desktop/Data Structures/Data Structures1/Data Structures1/Students.txt");
if(studentFile.is_open()){
while(getline (studentFile,line))
{
if ((username.length() == 7 && username.substr(0,4).compare("u000") == 0 && line.find(username) != std::string::npos) && (password.length() == 6 && password.substr(0,2).compare("pw") == 0 && line.find(password) != std::string::npos))
return true;
}
}
return false;
}
bool Student::login(std::string username){
std::ifstream studentFile;
studentFile.open("/Users/griffin/desktop/Data Structures/Data Structures1/Data Structures1/Students.txt");
if(studentFile.is_open()){
while(getline (studentFile,line))
{
if (username.length() == 7 && username.substr(0,4).compare("u000") == 0 && line.find(username) != std::string::npos)
return true;
}
}
return false;
}
主文件包括student.hpp。这是 Xcode 端的问题还是我的代码有错误?
Main.cpp
#include "student.hpp"
int main(int argc, const char * argv[]) {
return 0;
}
【问题讨论】:
-
主文件应该包括student.hpp,而不是student.cpp。那是错字吗?你能发布完整的错误信息吗?
-
还有包含 student.cpp 的 main.cpp 会导致多个定义错误。所有标准副本。
-
Spiller 打错了,我已经更新了代码以包含主要功能
-
@Griffin,现在错误信息怎么样?
-
"链接器命令失败,退出代码为 1(使用 -v 查看调用)"
标签: c++ xcode linker-errors