如何解决为什么我在'bool'之前收到此error-:expected primary-expression?
#include<iostream>
#include<string>
using namespace std;
class LFSR
{
private:
bool lfsr[];
private: int tap;
private: int t;
private: string s;
public:
LFSR(string seed,int tap)
{
s = seed;
t = tap;
lfsr = bool[s.length()];
t = s.length() - 1 - t;
for (int i = 0; i < seed.length(); i++)
{
if (seed.charAt(i) == 48)
{
lfsr[i] = false;
}
else
{
lfsr[i] = true;
}
}
}
int step()
{
boolean newBit = lfsr[0] ^ lfsr[tap];
for (int i = 0; i < lfsr.length - 1; i++)
{
lfsr[i] = lfsr[i + 1];
}
lfsr(lfsr.length - 1) = newBit;
return newBit == false ? 0 : 1;
}
int generate(int k)
{
int temp = 0;
for (int i = 0; i < k; i++)
{
temp = 2 * temp;
temp = temp + step();
}
return temp;
}
};
int main()
{
LFSR lfsr("01101000010",8);
for (int i = 0; i < 10; i++)
{
int bit = lfsr.step();
cout << lfsr << "+" << " " << bit;
}
LFSR lfsr("0110100010",8);
cout << "Testing generate()";
for (int i = 0; i < 10; i++)
{
int r = lfsr.generate(5);
cout << lfsr.to_string() << " " << r;
}
return 0;
}
在此行:
lfsr=bool[s.length()];
我收到上述错误。
我要做什么?
我正在尝试创建大小为10(种子长度或寄存器数量)的LFSR。
我的问题?
我为什么会得到这个错误?
如何解决此错误?
我试图在C ++中执行的Java代码 我会给你代码,让我们看看。
public class LFSR {
private boolean[] lfsr;
private int tap;
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
LFSR lfsr = new LFSR("01101000010",8);
System.out.println("Testing step()");
for (int i = 0; i < 10; i++)
{
int bit = lfsr.step();
System.out.println(lfsr + " " + bit);
}
lfsr = new LFSR("01101000010",8);
System.out.println("\nTesting generate()");
for (int i = 0; i < 10; i++)
{
int r = lfsr.generate(5);
System.out.println(lfsr + " " + r);
}
}
public LFSR(String seed,int tap)
{
lfsr = new boolean[seed.length()];
this.tap = (seed.length()-1)-tap;
for(int i = 0; i < seed.length(); i++)
{
if(seed.charAt(i) == 48)
{
lfsr[i] = false;
}
else
{
lfsr[i] = true;
}
}
}
public int step()
{
boolean newBit = lfsr[0] ^ lfsr[tap];
for(int i = 0; i < lfsr.length-1; i++)
{
lfsr[i] = lfsr[i+1];
}
lfsr[lfsr.length-1] = newBit;
return newBit == false ? 0 : 1;
}
public int generate(int k)
{
int temp = 0;
for(int i = 0; i < k; i++)
{
temp *= 2;
temp += step();
}
return temp;
}
public String toString()
{
String representation = "";
for(int i = 0; i < lfsr.length; i++)
{
representation += lfsr[i] == false ? 0 : 1;
}
return representation;
}
}
解决方法
不要像Java那样尝试对C ++进行编程,语法不同,语义完全不同。
例如(可能)
#include <vector>
#include <string>
private:
std::string s;
int t;
std::vector<bool> lfsr;
public:
LFSR(const std::string& seed,int tap) : s(seed),t(tap),lfsr(seed.length())
{
...
}
,
这是一个可能的解决方案。我认为,您可以将其与Java代码进行比较,并查看差异。
#include <vector>
#include <string>
#include <iostream>
class LFSR {
private:
std::vector<bool> lfsr;
int tap;
public:
LFSR(std::string seed,int tap) {
lfsr.reserve(seed.length());
this->tap = (seed.length()-1) - tap;
for(std::size_t i = 0; i < seed.length(); i++) {
lfsr.push_back(seed.at(i) == '0');
}
}
int step() {
bool newBit = lfsr[0] ^ lfsr[tap];
for(std::size_t i = 0; i < lfsr.size()-1; i++) {
lfsr[i] = lfsr[i+1];
}
lfsr[lfsr.size()-1] = newBit;
return newBit == false ? 0 : 1;
}
int generate(int k) {
int temp = 0;
for(int i = 0; i < k; i++) {
temp *= 2;
temp += step();
}
return temp;
}
std::string toString() const {
std::string representation = "";
for(std::size_t i = 0; i < lfsr.size(); i++) {
representation += lfsr[i] == false ? 0 : 1;
}
return representation;
}
friend std::ostream& operator<<(std::ostream &stream,LFSR const &lfsr) {
return stream << lfsr.toString();
}
};
int main() {
LFSR lfsr("01101000010",8);
std::cout << "Testing step()";
for (int i = 0; i < 10; i++) {
int bit = lfsr.step();
std::cout << lfsr << " " << bit;
}
LFSR lfsr2("01101000010",8);
std::cout << "\nTesting generate()";
for (int i = 0; i < 10; i++) {
int r = lfsr2.generate(5);
std::cout << lfsr2 << " " << r;
}
}
,
您可以将lfsr
的声明更改为std::unique_ptr<bool[]> lfsr;
。然后:
lfsr=new bool[s.length()];
您不必担心删除数组指针了;它是一个即发即弃的std实用程序,其行为类似于数组,但会降低该类的可复制性。即LFSR
将不能分配,也不能复制构造。
另一个选项是std::vector
,如先前的答复所述。
PS:不要忘记标题:
#include <memory>
干杯, FM。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。