在C++中实现Set of octets类
Implementing Set of octets class in C++
我有一个OOP任务,上面写着:
您被要求实现一个C++类来建模一组八位字节(无符号的8位数字,通常称为字节)。该类将在嵌入式应用程序中使用,该应用程序不能假设存在STL,并且还必须使用尽可能少的存储量(对于完整集的最坏情况),同时在执行过程中尽可能高效。您的类应该具有适当的构造函数和析构函数;除了实现允许类用户向集合添加数字和从集合中删除数字以及检查数字是否属于集合的方法之外。再一次,您的set类应该是自包含的,不应该使用C++STL库,而是应该基于内置的C++类型。您还被要求实现一个主程序,该程序使用您的类来演示以上内容接口。
这是我的set.h文件:
// File: Set.h
#ifndef SET_H
#define SET_H
// Specification of the class
class Set
{
private:
int memory[8];
public:
Set(); // Constructor
~Set(); // Destructor
void add(int i); // Add number to a set
bool find(int i); // Checks if a number belongs to a set
void remove(int i);// Remove number from a set
};
#endif
和我的set.cpp文件
// File: Set.cpp
#include <iostream>
#include "Set.h"
Set::Set(){ // Constructor
for (int x = 0; x <8; x++)
memory[x] = 0;
};
void Set::add(int i) // Add integer i to a set
{
if (find(i)){
int index = i / 32;
int bit = i % 32;
memory[index] += 1<< bit ;
}
}
bool Set::find(int i) // Checks if integer i belongs to a set. Returns true if yes
{
int index = i / 32;
int bit = i % 32;
int temp = (memory[index] >> bit)%2;
return temp;
}
void Set::remove(int i) // Remove integer i from a set
{
if (find(i)){
int index = i / 32;
int bit = i % 32;
memory[index] -= 1 << bit;
}
}
我尝试实现一个简单的主文件来测试类,如下所示:
// File: Setmain.cpp
// Test file for the Set class
#include <iostream>
#include "Set.cpp"
using namespace std;
int main(){
Set test;
test.add(200);
return 0;
}
我得到了这些错误,我不知道如何解决它们,任何帮助都将不胜感激
error LNK2005: "public: __thiscall Set::Set(void)" (??0Set@@QAE@XZ) already defined in Set.obj
error LNK2005: "public: void __thiscall Set::add(int)" (?add@Set@@QAEXH@Z) already defined in Set.obj
error LNK2005: "public: bool __thiscall Set::find(int)" (?find@Set@@QAE_NH@Z) already defined in Set.obj
error LNK2005: "public: void __thiscall Set::remove(int)" (?remove@Set@@QAEXH@Z) already defined in Set.obj
error LNK2019: unresolved external symbol "public: __thiscall Set::~Set(void)" (??1Set@@QAE@XZ) referenced in function _main
error LNK1120: 1 unresolved externals
提前感谢
将主菜单更改为
#include "Set.h"
-
在setmain.cpp中,更改
#include "Set.cpp"
至
#include "Set.h"
-
在set.cpp中,实现一个析构函数
Set::~Set() { }
当我复制您的代码时,我只得到一个错误,类似于上面列表中的最后一个错误(我在Linux/Fedora下运行g++)。一旦我定义了Destructor函数Set::~Set(void)(作为一个空函数),编译就成功了。
Set::~Set(void) { // Destructor
};
除此之外,就最佳编程实践而言,我建议进行一些范围检查,就代码效率而言,我推荐使用移位运算符(I>>5)而不是除法(I/32),并使用掩码运算(I&0x1F)而不是模(I%32)。人们会希望一个好的优化编译器能够以任何一种方式生成相同的代码,但为什么会这样呢?
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 我看到"use of undeclared identifier"错误,有人可以告诉我如何解决它吗?
- 赛通"Cannot take address of memoryview slice"
- C++ Version Of Double.longBitsToDouble
- 收到错误"invalid use of non-static data member 'stu::n' "
- C++ Usage of AsyncCallback
- 错误:"Left of getValue must have class/struct/union"
- Centos7 g++ "to_string is not in a member of std"
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 传递 std::vector of std::shared_ptr,而不是更新对象
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- 在C++中实现Set of octets类