每次我在CodeBlocks中编程,在开始时,自动完成工作正常.经过一些动作和分钟(我不知道到底是什么原因),部分自动完成工作.
它完成了基本变量的名称,但它没有完成结构的内部名称等.
什么原因?
在"结构的内部名称"中,我的意思是,例如,对于变量gl.A:
typedef struct
{
bool A;
} B;
B gl;
Run Code Online (Sandbox Code Playgroud)
抱歉我的英语不好......
我想像数组一样表示我的对象.我的意思是程序员可以写他的代码
myobject[3]=2
在后面(在myobject代码中)根本没有数组,它只是表示.
所以,我需要重载[]和=同步.如何才能做到这一点?
谢谢,抱歉我的英语不好.
如果类继承了具有静态变量成员的基类,那么它们将是唯一一个与所有继承类共享的成员.
我有几种继承类,并且每一个都有很多实例.我希望每个继承类都有一个单独的静态成员,它与所有实例共享.
怎么做到呢?
谢谢,抱歉我的英语不好.
编辑:
class a{
static int var;};
class b::a{};
class c::a{};
Run Code Online (Sandbox Code Playgroud)
现在,我想的是B的所有实例都会有相同的变种,和C的所有实例都会有相同的变种 ,但该变种 B的将是来自不同变种的C.
我再次对不起我的英语,如果你能纠正我,请你这样做.
编辑:解决了,我知道如何,但我不明白为什么.
我改变了variables声明
tr1::unordered_map<int,T> variables;
Run Code Online (Sandbox Code Playgroud)
至
unordered_map<int,T> variables;
Run Code Online (Sandbox Code Playgroud)
它工作正常.
如果你知道为什么请在答案中写下来.
我有一个非常大的程序,所以我不知道我应该带哪个代码.
有一个抽象类,它继承了派生类.摘要有unordered_map<int,int>(模板)作为私有成员和公共方法insert(int,int).
派生类使用基类insert方法将元素插入unordered_map<int,int>容器,
第一个int使用像计数器一样,从0开始.前十一个插入元素正常,但在第12个元素中我得到sigsegv,而struct equal_to在stl_function.h中错误(209).
在调试器中,我看到unordered_map的bucket_count等于11,也许它是某些东西的线索.
我的编译器是gcc 4.6.1.
也许你可以写一般可以导致sigsegv的内容unordered_map.insert?
谢谢,抱歉我的英语不好.
如果我知道哪个,我会带来具体的代码.
编辑:这是insert方法:
virtual void Insert(int arrayPlace, T value)
{
if (!isReadOnly)
{
if (IsValueDataValid(value))
{
variables[arrayPlace] = value;
}
else
{
throw 2;
}
}
else
{
throw 4;
}
};
Run Code Online (Sandbox Code Playgroud)
声明是:
tr1::unordered_map<int,T> variables;
Run Code Online (Sandbox Code Playgroud)
当arrayPlace== 11时,sigsegv会发生,并且无关紧要value.
有一个带有方块的板,它们的值依赖于一个数组,它是用useState钩子处理的。每次点击都应该将值提高一,但不幸的是,它会提高两倍(除了第一次点击)。
我的问题是:
(1) 为什么会发生这种情况,(2) 如何避免这种情况,以及,一般来说,(3) 是否有更好的方法来使用钩子处理这样的数组。
let emptyBoard = Array.from({ length: parseInt(props.rows, 10) }, () =>
new Array(parseInt(props.columns, 10)).fill(0)
);
const [squaresValues, setSquaresValue] = useState(emptyBoard);
function onClick(id) {
const [rowIndex, cellIndex] = id;
console.log("the " + id + " square was clicked");
setSquaresValue(prevValues => {
let newBoard = [...prevValues];
console.log("before: " + newBoard[rowIndex][cellIndex]);
newBoard[rowIndex][cellIndex] = newBoard[rowIndex][cellIndex] + 1;
console.log("after: " + newBoard[rowIndex][cellIndex]);
return newBoard;
}
);
}
Run Code Online (Sandbox Code Playgroud)
日志:
the 3,0 square was clicked
before: 0
after: 1
the …Run Code Online (Sandbox Code Playgroud) 作为对方法参数的调查的一部分,我尝试了新的switch 模式匹配(预览版)。使用传统条件,它可以完美运行:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
if (firstParameter.getType() == Integer.class) {
System.out.println("Integer");
}
Run Code Online (Sandbox Code Playgroud)
当我尝试重构它以使用switch语句时,它没有编译:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
switch (firstParameter.getType()) {
case Integer.class: System.out.println("Integer");
case int.class: System.out.println("int");
default: System.out.println("other");
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error: incompatible types: Class<Integer> cannot be converted to Class<CAP#1>
case Integer.class: System.out.println("Integer");
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
Run Code Online (Sandbox Code Playgroud)
这是无法完成的事情,还是只是语法错误?
在关于托管代码中的静态方法的这个问题之后,如果那里的答案与像c ++这样的非托管代码相关,我会感兴趣.
我制作了数千个实例,我的问题主要是关于静态方法.这种方法比常规方法节省内存吗?
谢谢,抱歉我的英语不好.
Java 的类有一个将单个位设置为 1 (=true) 的BitSet方法。Set该方法源码如下:
public void set(int bitIndex) {
if (bitIndex < 0)
throw new IndexOutOfBoundsException("bitIndex < 0: " + bitIndex);
int wordIndex = wordIndex(bitIndex);
expandTo(wordIndex);
words[wordIndex] |= (1L << bitIndex); // Restores invariants
checkInvariants();
}
Run Code Online (Sandbox Code Playgroud)
除了检查之外,该方法的核心代码是:words[wordIndex] |= (1L << bitIndex)。我可以在作业中清楚地看到,左侧部分是保存相关位的特定单词。但是,我不明白右侧部分(位索引的左移)如何导致请求的(并且只有它)位设置为 1。您能解释一下吗?
我使用此方法初始化具有默认值的ArrayList:
private ArrayList<Integer> createArrayList(int size, int defaultValue)
{
ArrayList<Integer> arrayList = new ArrayList<>(size);
IntStream.range(0, size ).parallel().forEach(i->{arrayList.add(defaultValue);});
return arrayList;
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,如果我通过单元测试检查返回数组的大小,它不是固定数字,并且几乎总是小于请求的大小.
如果我删除parallel()它的大小总是按要求.
为什么会这样?
我有一个模板类OneCell,在这里定义:
template <class T>
class OneCell
{
.....
}
Run Code Online (Sandbox Code Playgroud)
我OneCell在这里有一个从T到T 的演员
operator T() const
{
getterCount++;
return value;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我想在此方法中增加变量,但因为关键字而出现错误const.
另一方面,如果我删除此关键字,则转换根本不起作用.
我能做什么?
谢谢,抱歉我的英语不好.
c++ ×5
java ×3
arrays ×1
autocomplete ×1
bitset ×1
casting ×1
codeblocks ×1
const ×1
inheritance ×1
java-17 ×1
java-stream ×1
memory ×1
react-hooks ×1
reactjs ×1
static ×1
templates ×1
unmanaged ×1
use-state ×1