Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我在从类编写第一个函数调用时遇到问题。首先,在头文件的
其次,我在
第三,我试图调用两个函数:
如果有人感兴趣,这是我得到的错误。
将
这就是剩下的。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
5年前关闭。
我在从类编写第一个函数调用时遇到问题。首先,在头文件的
Unio
和Intersect
函数定义中使用字符串数组作为参数时遇到麻烦。我知道必须通过引用将数组传递给函数,但是我看不出是怎么引起问题的。我已经以这种方式在示例中看到了。其次,我在
Unio
和Intersect
函数中创建的集合将不接受我作为参数传递的数组。我想这与无法在头文件中声明任何内容有关,但是我看不到将数组传递到集合中的替代方法。第三,我试图调用两个函数:
Unio()
中的Intersect()
和int main()
,但它们都未定义。我知道我需要Class :: Function或Object.Function,但是Unio和Intersect函数都未附加到对象,当我将它们附加到其类Union::Unio
或Intersection::Intersect
时,会被告知“非静态成员引用必须相对于特定对象。”#include <string>
#include <cstring>
#include <set>
#include <iostream>
#include <iterator>
#ifndef UNIONSET
#define UNIONSET
class Union
{
public:
void Unio(int capture, int capture2, string str1[], string str2[]);
private:
int g, i, h;
string last[100];
set<string> newset1(last, last+100);
set<string>::iterator it;
};
#endif
#ifndef INTERSET
#define INTERSET
class Intersection
{
public:
void Intersect(string str3[], string str4[]);
private:
set<string> newset2(str3, str3+100);
set<string> newset3(str4, str4+100);
set<string>::iterator it2;
};
#endif
<code>
/*
Andrew_Spiteri_hw3 is an attempt at the third homework assignment for CSE 232.
This program is designed to test two sets for union and intersection between them and
subsquently display the results.
*/
#include <string>
#include <iostream>
#include <set>
#include <cstring>
#include <iterator>
#include "Set.h"
using namespace std;
void Union::Unio(int capture2, int capture, string str1[], string str2[])
{
int g = 0;
string last[100];
for(int i = 0; i < capture; ++i)
{
for(int h = 0; h < capture2; ++h)
{
if(str1[i] == str2[h])
{
last[g] = str1[i];
++g;
}
}
}
set<string> newset1(last, last+100);
set<string>::iterator it;
cout<<"The numbers constitute the intersection between the sets.\n";
for(it=newset1.begin(); it!=newset1.end(); ++it)
{
cout << *it<<' ';
}
cout<<'\n';
};
void Intersection::Intersect(string str3[], string str4[])
{
set<string> newset2(str3, str3+100);
set<string> newset3(str4, str4+100);
newset2.insert(newset3.begin(), newset3.end());
set<string>::iterator it2;
cout<<"This set constitutes a union between the two sets."<<'\n';
for(it2=newset2.begin(); it2!=newset2.end(); ++it2)
{
cout << *it2<<' ';
}
cout<<'\n';
};
int main()
{
string set1, set2;
string extra1[100], extra2[100];
cout<<"Enter your first set."<<'\n';
getline(cin,set1);
char *ch1 = new char[100];
strcpy(ch1, set1.c_str());
cout<<"Enter you second set."<<'\n';
getline(cin,set2);
char *ch2 = new char[100];
strcpy(ch2, set2.c_str());
int z = 0;
for(int i = 0; i < set1.size(); ++i)
{
const char c = ch1[i];
if(c == ' ')
{
++z;
continue;
}
else if (c == ',')
{
continue;
}
else if (c >= '0' && c <= '9')
{
extra1[z] += ch1[i];
}
else
continue;
}
int capture = z + 1;
int r = 0;
for(int i = 0; i < set2.size(); ++i)
{
const char c = ch2[i];
if(c == ' ')
{
++r;
continue;
}
else if (c == ',')
{
continue;
}
else if (c >= '0' && c <= '9')
{
extra2[r] += ch2[i];
}
else
continue;
}
int capture2 = r + 1;
Unio(capture, capture2, &extra1, &extra2);
Intersect(&extra1, &extra2);
}
如果有人感兴趣,这是我得到的错误。
将
using namespace std;
添加到头文件后,我得到的错误消息要少得多。这就是剩下的。
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\set.h(21): error C2061: syntax error : identifier 'last'
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\set.h(37): error C2061: syntax error : identifier 'str3'
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\set.h(38): error C2061: syntax error : identifier 'str4'
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\intset.cpp(74): warning C4018: '<' : signed/unsigned mismatch
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\intset.cpp(98): warning C4018: '<' : signed/unsigned mismatch
c:\users\andrew\documents\visual studio 2012\projects\andrew_spiteri_hw3\andrew_spiteri_hw3\intset.cpp(120): error C2664: 'Union::Unio' : cannot convert parameter 3 from 'std::string (*)[100]' to 'std::string []'
最佳答案
我发现您的代码存在以下问题:
我不知道#include "Set.h"
的目的是什么。您的代码似乎没有使用任何东西。
您需要在using namespace std;
行之前向上移动#ifndef UNIONSET
。
使Union::Unio
成为静态成员函数。
从set newset1(last, last+100);
删除或注释行Union
。看来您不需要该类的任何成员数据。但是,其他行不会创建编译器错误。
使Intersection::Intersect
成为静态成员函数。
从set newset2(str3, str3+100);
删除或注释行set newset3(str4, str4+100);
和Intersection
。
将呼叫更改为Union::Unio
。它必须是:Union::Unio(capture, capture2, extra1, extra2);
将呼叫更改为Intersection::Intersect
。它必须是:Intersection::Intersect(extra1, extra2);
通过以上更改,我得以编译该文件。我没有检查Union::Unio
和Intersection::Intersect
中的逻辑是否正确。
关于c++ - 定义一个类并调用其成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21843934/
10-12 04:57