CodeBlocks代码在Visual Studio中不起作用
CodeBlocks code not working in Visual Studio
我有一些代码可以简单地计算学生的最终成绩。当我在CodeBlocks中运行它时,我没有问题。然而,当我在Visual Studio中复制它(想尝试IDE)时,我得到了错误vector subscript out of range
。
在main.cpp
:中
#include <iostream>
#include <vector>
#include <stdexcept>
#include "info.h"
#include "grade.h"
int main()
{
std::cout << "enter name and grades" << std::endl;
std::vector<info> students;
info record;
while (read(std::cin, record))
{
students.push_back(record);
}
for (std::vector<info>::size_type i = 0; i < students.size(); i++)
{
std::cout << students[i].name << " ";
try
{
double finalgrade = grade(students[i]); // ERROR
std::cout << finalgrade;
}
catch (std::domain_error e)
{
std::cout << e.what();
}
std::cout << std::endl;
}
return 0;
}
在info.h
:中
#ifndef GUARD_info
#define GUARD_info
#include <string>
#include <vector>
struct info
{
std::string name;
double midterm, final;
std::vector<double> homework;
};
std::istream& read_hw(std::istream&, std::vector<double>&);
std::istream& read(std::istream&, info&);
#endif
在info.cpp
:中
#include <iostream>
#include <vector>
#include "info.h"
std::istream& read_hw(std::istream& in, std::vector<double>& hw)
{
if (in)
{
hw.clear();
double x;
while (in >> x)
{
hw.push_back(x);
}
in.clear();
}
return in;
}
std::istream& read(std::istream& in, info& stu)
{
in >> stu.name >> stu.midterm >> stu.final;
read_hw(in, stu.homework);
return in;
}
我有median.cpp
、median.h
、grade.cpp
和grade.h
文件,其中包含计算中位成绩和期末成绩的函数(由于职位越来越长,所以将它们排除在外)。
我认为问题不在于代码本身(因为它在CodeBlocks上运行良好),而在于它与不同编译器的兼容性。我还没有找到一个令人满意的答案,我很高兴能得到关于可能导致错误的原因的信息(visualstudio构建它没有错误,但在显示最终成绩时失败了)。非常感谢。
EDIT:这里是grade.cpp
、grade.h
、median.cpp
和median.h
文件:
在grade.cpp
:中
#include <vector>
#include <stdexcept>
#include "median.h"
#include "info.h"
double grade(double midterm, double final, double hw)
{
return 0.2*midterm + 0.4*final + 0.4*hw;
}
double grade(double midterm, double final, const std::vector<double>& hw)
{
if (hw.size() == 0)
throw std::domain_error("Student has done no homework.");
return grade(midterm, final, median(hw));
}
double grade(const info& stu)
{
return grade(stu.midterm, stu.final, stu.homework);
}
在grade.h
中:
#ifndef GRADE_H_INCLUDED
#define GRADE_H_INCLUDED
#include <vector>
#include "info.h"
#include <stdexcept>
double grade(double, double, double);
double grade(double, double, const std::vector<double>&);
double grade(const info&);
#endif
在median.cpp
:中
#include <vector>
#include <stdexcept>
double median(std::vector<double> vec)
{
if (vec.size() == 0)
throw std::domain_error("Median of an empty vector.");
typedef std::vector<double>::size_type vec_sz;
vec_sz size = vec.size();
vec_sz mid = size / 2;
return size % 2 ? (vec[mid] + vec[mid - 1]) / 2 : vec[mid];
}
在median.h
:中
#ifndef GUARD_median_h
#define GUARD_median_h
#include <vector>
double median(std::vector<double>);
#endif
我在median()函数中错误地写入
return size % 2 ? (vec[mid] + vec[mid - 1]) / 2 : vec[mid];
我应该在什么时候写
return size % 2 == 0 ? (vec[mid] + vec[mid - 1]) / 2 : vec[mid];
谢谢MarkU!
相关文章:
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- C++ Visual Studio Code 的设置不起作用
- 代码在Visual Studio 2017中不起作用,但在VS代码中工作
- Clang Tidy 插件 for Visual Studio Code 不起作用/如何设置
- 无法打开包含文件'Graphics.hpp'没有这样的文件或目录,Visual Studio的其他包含不起作用
- 自动完成在git存储库中的Visual Studio项目中不起作用
- Visual Studio Code 中的 #include < mat.h> 不起作用
- 迁移到 Visual Studio 2015 时 ATL 不起作用
- Visual Studio - 禁用特定警告似乎不起作用
- Visual Studio 2017 C 本地单元测试框架不起作用
- Visual Studio 2015 中的其他包含目录不起作用
- 在Visual Studio C ++系统中使用freopen()时,"pause" )不起作用
- Visual Studio 2017 对项目的本机引用不起作用
- Lambda适用于最新的Visual Studio,但在其他地方不起作用
- 生产力 Microsoft Visual Studio 2012 的电源工具不起作用
- gotoxy() 函数在 Visual Studio 中不起作用
- 为什么const_cast<iterator>(const_iterator)在Visual C++ 6.0中有效,而在Visual Studio .NET中不起作用?
- Visual Studio 命令行不起作用
- outputdebugstring,printf不起作用(Visual Studio 2012,Windows 8)
- 从Visual Studio Express迁移到Netbeans。#include < dwmapi.h> 不起作用