2016-12-15 101 views
1

在Visual Studio中开发我的小示例时,我遇到了C++中未知的问题,并且在调试很多次后,我仍然无法找出问题出在哪里,请帮我解决这样的:Visual Studio C++中的运行时错误

这里是我的Header.h:

#pragma once 
#include <iostream> 
#include <vector> 
#include <string> 
using namespace std; 

这里是我的Team.h:

#pragma once 
#include "Header.h" 
class Driver; 

class Team 
{ 
private: 
    string quocGia; 
    string ten; 
    int soLanVoDich; 
    vector<Driver*> ds_nguoi_dua; 
public: 
    Team(); 
    Team(string quocGia, string ten, int soLanVD); 
    ~Team(); 
    void AddRacer(Driver* myD); 

    void AddRacer(string ten, string quocTich, int slThang, int slVD, Team* tenTeam); 
    string getName(); 
}; 

现在是Team.h实现:

#include "Team.h" 


Team::Team() 
{ 
} 

Team::Team(string ten, string quocGia, int soLanVD){ 
    this->quocGia = quocGia; 
    this->ten = ten; 
    this->soLanVoDich = soLanVD; 
} 

string Team::getName(){ 
    return this->ten; 
} 


Team::~Team() 
{ 
} 

void Team::AddRacer(Driver* myD){ 
    this->ds_nguoi_dua.push_back(myD); 
} 

class Driver{ 
public: 
    Driver(string myTen, string quocTich, int slThang, int slVD, Team* tenTeam); 
}; 

void Team::AddRacer(string myTen, string quocTich, int slThang, int slVD, Team* tenTeam){ 
    Driver* myD = new Driver(myTen, quocTich, slThang, slVD, this); 
    this->ds_nguoi_dua.push_back(myD); 
} 

接下来,我定义Driver类:

// Driver.h 
#pragma once 
#include "Header.h" 

class Team; 

class Driver 
{ 
private: 
    string hoTen; 
    string quocTich; 
    int soLanThang; 
    int soLanVoDich; 
    string tenTeam; 
    static int diem; 
public: 
    Driver(); 

    Driver(string hoTen, string quocTich, int soLanThang, int soLanVoDich, Team* tenTeam); 
    ~Driver(); 
}; 

和实现为:

#include "Driver.h" 

int Driver::diem = 0; 

Driver::Driver() 
{ 
    this->hoTen = ""; 
    this->quocTich = ""; 
    this->soLanThang = 0; 
    this->soLanVoDich = 0; 
} 

Driver::~Driver() 
{ 
} 

class Team{ 
public: 
    string getName(); 
}; 

Driver::Driver(string mHoTen, string mQuocTich, int soLanThang, int slVD, Team* team){ 
    this->hoTen.assign(mHoTen); 
    this->quocTich.assign(mQuocTich); 
    this->soLanThang = soLanThang; 
    this->soLanVoDich = slVD; 
    this->tenTeam.assign(team->getName()); 
} 

我对车手和车队的包装:

#pragma once 
#include "Driver.h" 
#include "Team.h" 
#include <algorithm> 

using namespace std; 

class F1WorldFinal 
{ 
public: 
    F1WorldFinal(); 
    ~F1WorldFinal(); 
}; 

而且这是主要类别:

#include <cstdlib> 
#include <iostream> 
#include "F1WorldFinal.h" 

using namespace std; 

int main(){ 
    Team* teamRedBull = new Team("Red Bull", "Austrian", 4); 

    Driver* driver = new Driver("David Coulthard", "British", 13, 0, teamRedBull); 

    teamRedBull->AddRacer(driver); 

    // The problem happens here. 
    teamRedBull->AddRacer("Sebastian Vettel", "German", 42, 4, teamRedBull); 

    return 0; 
} 

但改变问题行到后:

teamRedBull->AddRacer(new Driver("Sebastian Vettel", "German", 42, 4, teamRedBull)); 

一切运作良好。

你可以花时间解释为什么发生这种情况,我有调试,事实证明问题是在xstring @@,所以我真的不能解决这个问题。

+2

此运行时错误消息的文本是什么?你的调试器告诉你什么? –

+2

退出或至少减少使用'new'。例如,不需要'main'使用'new'。 C++不是Java。另外,您发布的其他代码中不需要“新”。您可以简单地创建值对象。 – PaulMcKenzie

+2

无关,你会长期为自己做一个忙:“为什么”使用命名空间标准“被认为是不好的做法?”](https://stackoverflow.com/questions/1452721/why-is-using -namespace-std-considered-bad-practice) – WhozCraig

回答

0

感谢WhozCraig,现在我已经解决了我的问题,使用std ::而不是使用名称空间标准。

这里是我的编辑版本:

Driver.h

#pragma once 
#include "Header.h" 

class Team; 

class Driver 
{ 
private: 
    std::string hoTen; 
    std::string quocTich; 
    int soLanThang; 
    int soLanVoDich; 
    std::string tenTeam; 
    static int diem; 
public: 
    Driver(); 

    Driver(std::string hoTen, std::string quocTich, int soLanThang, int soLanVoDich, Team* tenTeam); 
    ~Driver(); 
}; 

Team.h

#pragma once 
#include "Header.h" 
class Driver; 

class Team 
{ 
private: 
    std::string quocGia; 
    std::string ten; 
    int soLanVoDich; 
    std::vector<Driver*> ds_nguoi_dua; 
public: 
    Team(); 
    Team(std::string quocGia, std::string ten, int soLanVD); 
    ~Team(); 
    void AddRacer(Driver* myD); 

    void AddRacer(std::string ten, std::string quocTich, int slThang, int slVD, Team* tenTeam); 
    std::string getName(); 
}; 

Driver.cpp

#include "Driver.h" 

int Driver::diem = 0; 

Driver::Driver() 
{ 
    this->hoTen = ""; 
    this->quocTich = ""; 
    this->soLanThang = 0; 
    this->soLanVoDich = 0; 
} 

Driver::~Driver() 
{ 
} 

class Team{ 
public: 
    std::string getName(); 
}; 

Driver::Driver(std::string mHoTen, std::string mQuocTich, int soLanThang, int slVD, Team* team){ 
    this->hoTen.assign(mHoTen); 
    this->quocTich.assign(mQuocTich); 
    this->soLanThang = soLanThang; 
    this->soLanVoDich = slVD; 
    this->tenTeam.assign(team->getName()); 
} 

Team.cpp:

#include "Team.h" 


Team::Team() 
{ 
} 

Team::Team(std::string ten, std::string quocGia, int soLanVD){ 
    this->quocGia = quocGia; 
    this->ten = ten; 
    this->soLanVoDich = soLanVD; 
} 

std::string Team::getName(){ 
    return this->ten; 
} 


Team::~Team() 
{ 
} 

void Team::AddRacer(Driver* myD){ 
    this->ds_nguoi_dua.push_back(myD); 
} 

class Driver{ 
public: 
    Driver(std::string myTen, std::string quocTich, int slThang, int slVD, Team* tenTeam); 
}; 

void Team::AddRacer(std::string myTen, std::string quocTich, int slThang, int slVD, Team* tenTeam){ 
    Driver* myD = new Driver(myTen, quocTich, slThang, slVD, this); 
    this->ds_nguoi_dua.push_back(myD); 
} 

F1WorldFinal.h

#pragma once 
#include "Driver.h" 
#include "Team.h" 

class F1WorldFinal 
{ 
public: 
    F1WorldFinal(); 
    ~F1WorldFinal(); 
}; 

Header.h

#pragma once 
#include <iostream> 
#include <vector> 
#include <string> 

主要

#include "F1WorldFinal.h" 


int main(){ 
    Team* teamRedBull = new Team("Red Bull", "Austrian", 4); 

    Driver* driver = new Driver("David Coulthard", "British", 13, 0, teamRedBull); 

    teamRedBull->AddRacer(driver); 

    // The problem happens here. 
    teamRedBull->AddRacer("Sebastian Vettel", "German", 42, 4, teamRedBull); 

    return 0; 
} 

谢谢大家,我非常赞赏。

+0

你能否描述一下你所修复的东西?那里有太多的代码可以很容易地看到差异。 –

+0

这个“解决方案”充满了内存泄漏。 – PaulMcKenzie

相关问题