Vector 向量子脚本超出范围c++; 我试图用C++编写一个数学集,但我有问题。当我启动我的程序,我有“矢量子脚本超出范围”的错误。我正在使用VisualStudio,它不会显示任何错误。对不起,我的语言不好 #include "Set.h"

Vector 向量子脚本超出范围c++; 我试图用C++编写一个数学集,但我有问题。当我启动我的程序,我有“矢量子脚本超出范围”的错误。我正在使用VisualStudio,它不会显示任何错误。对不起,我的语言不好 #include "Set.h" ,vector,range,out,Vector,Range,Out,向量子脚本超出范围c++; 我试图用C++编写一个数学集,但我有问题。当我启动我的程序,我有“矢量子脚本超出范围”的错误。我正在使用VisualStudio,它不会显示任何错误。对不起,我的语言不好 #include "Set.h" template <class T> void Set<T>::print() { cout << endl << "{"; for(int i = 0; i < set.size() -

向量子脚本超出范围c++; 我试图用C++编写一个数学集,但我有问题。当我启动我的程序,我有“矢量子脚本超出范围”的错误。我正在使用VisualStudio,它不会显示任何错误。对不起,我的语言不好

#include "Set.h"



template <class T>
void Set<T>::print() {
cout << endl << "{";
for(int i = 0; i < set.size() - 1; i++) {
    cout << set[i] << ", ";
}
//cout << set[set.size()] << "}" << endl;
cout << endl;
}

 template <class T>
bool Set<T>::contains(T value) {
for(unsigned int i = 0; i < set.size(); i++) {
    if(set[i] == value) return true;
}
return false;
}

template <class T>
void Set<T>::operator +(const T &obj) {
if(!contains(obj)) set.push_back(obj);
}

template <class T>
void Set<T>::operator -(const T &obj) {
if(contains(obj)) {
    unsigned int i = 0;
    // NIE DZIAŁA
    while(i < set.size()) {
        if(set[i] == obj) break;
        i++;
    }


    while(i < (set.size() - 1)) {
        set[i] = set[i + 1];
        i++;
    }

    //set[i] = set[set.size()];
}
}

template <class T>
Set<T> Set<T>::operator +(const Set<T> &obj) {
Set<T> result;

for(unsigned int i = 0; i < set.size(); i++) {
    result + set[i];
}

for(unsigned int i = 0; i < obj.set.size(); i++) {
    if(!result.contains(obj.set[i])) {
        result + obj.set[i];
    }
}

return result;
}

template <class T>
Set<T> Set<T>::operator -(const Set<T> &obj) {
Set<T> result;

for(unsigned int i = 0; i < set.size() - 1; i++) {
    if(!contains(obj.set[i])) {
        result + set[i];
    }
}

return result;
  }

 template <class T>
 Set<T> Set<T>::operator *(const Set<T> &obj) {
Set<T> result;

for(unsigned int i = 0; i < set.size() - 1; i++) {
    if(contains(obj.set[i])) {
        result + set[i];
    }
}

return result;
 }
#包括“Set.h”
样板
空集::打印(){

我可以解决我的问题。它是用打印方法解决的。这是该方法的正确版本:

template <class T>
void Set<T>::print() {
if(!set.empty()) {
    cout << endl << "{";
    for(unsigned int i = 0; i < set.size() - 1; i++) {
        cout << set[i] << ", ";
    }
    cout << set[set.size() - 1] << "}" << endl;
    cout << endl; }
} 
模板
空集::打印(){
如果(!set.empty()){

cout该消息表示您试图访问一个不存在的向量元素。您应该使用调试器找出其中的位置。此外,我注意到您的循环中有点不一致,例如,我看到的是
I
I
以及while循环,它们似乎做了或多或少相同的事情。在
操作符*
中,您不应该分配
result+set[i]的结果吗
?无论如何,在主题上:您在哪里和什么时候得到错误?例如,
集合
类的哪个方法以及调用的代码是什么样子的?当我尝试减去两个集合或将两个集合相乘时。