我对类和超类共享字段有点困惑.我原以为这是好的:
class SuperC {
public:
SuperC();
protected:
double value;
};
class C : public SuperC {
public :
C(double value);
};
SuperC::SuperC(){}
C::C(double value):SuperC(),value(value){}
Run Code Online (Sandbox Code Playgroud)
但是编译器告诉我C没有字段"value".C不继承SuperC中定义的那个?
很多
我使用 mkdocs 和 mkdocstrings 插件来生成 Python 包的文档。
我的包裹以标准方式组织
- setup.py
- mkdocs.yaml
- docs/
- mypackage/
- __init__.py
- module1.py
- module2.py
- subpackage1/
- __init__.py
- submodule1.py
- submodule2.py
- [...]
Run Code Online (Sandbox Code Playgroud)
在mkdocs.yml:
plugins:
- mkdocstrings
nav:
- API: references.md
Run Code Online (Sandbox Code Playgroud)
并在references.md:
# API references
::: mypackage
Run Code Online (Sandbox Code Playgroud)
这不会生成任何文档(即“API”页面保持空白)
另一方面,这有效:
::: mypackage.module1
Run Code Online (Sandbox Code Playgroud)
跑步mkdocs build -v:
DEBUG - mkdocstrings: Matched '::: mypackage'
DEBUG - mkdocstrings: Using handler 'python'
DEBUG - mkdocstrings: Collecting data
DEBUG - griffe: Found …Run Code Online (Sandbox Code Playgroud) 似乎可以将参数传递给装置:
然而,在实现这个最小的示例时,我收到一个错误。
import pytest
@pytest.fixture
def my_fixture(v):
print("fixture in")
yield v+1
print("fixture out")
@pytest.mark.parametrize("my_fixture",[1], indirect=True)
def test_myfixture(my_fixture):
print(my_fixture)
Run Code Online (Sandbox Code Playgroud)
@pytest.fixture def my_fixture(v):未找到 E 固定装置“v”
上面的代码有什么问题吗?
(python 3.8.10,pytest-6.2.5)
我正在为codemirror创建一个新的简单模式.
我希望当用户按下"tab"时,整行会缩进(而不是仅仅是光标之后的行部分,"将行分成两行").
最简单的方法是什么?
注意:不必在模式中定义相应的代码.任何其他方法(例如添加或配置)也可以.
以下代码工作正常:
function a() { console.log("a"); };
function b() { console.log("b"); };
var F = {1:a,2:b};
F[1](); // log "a"
F[2](); // log "b"
Run Code Online (Sandbox Code Playgroud)
但这个没有:
function a() { console.log("a"); };
function b() { console.log("b"); };
var A = 1;
var B = 2;
var F = {A:a,B:b};
F[A](); // log "TypeError : F[A] is not a function"
Run Code Online (Sandbox Code Playgroud)
这个想法是A和B是常数整数,仅用于代码可读性.我知道javascript中没有"const",但你明白了.
什么是干净的方式来获得这样的工作?(如果A和B在最后有效地保持不变,我不在乎那么多,只是让它们大写表示我未来不会改变它们的价值).
跑步:
ansible -m setup <hostname>
Run Code Online (Sandbox Code Playgroud)
(主机名是 ubuntu 20.04 桌面)
返回警告:
[警告]:在 JSON 数据之后模块调用有垃圾:AttributeError("module 'platform' has no attribute 'dist'")
并且输出不显示任何字段“ansible_distribution_release”。
正如预期的那样,使用此变量的任务失败:
'ansible_distribution_release' 未定义
我可能会错过什么?
编辑:该问题出现在 ansible 2.5.1 中,并通过运行较新版本的 ansible 解决,请参阅已接受的答案。
我有一个声明如下的类:
class TestFoo {
public:
TestFoo();
virtual void virtualFunction();
void nonVirtualFunction();
};
Run Code Online (Sandbox Code Playgroud)
我尝试以这种方式实现
TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
Run Code Online (Sandbox Code Playgroud)
在编译时返回错误:
undefined reference to vtable for TestFoo
Run Code Online (Sandbox Code Playgroud)
我试过了 :
TestFoo::TestFoo(){}
void TestFoo::nonVirtualFunction(){}
void TestFoo::virtualFunction(){}
Run Code Online (Sandbox Code Playgroud)
编译确定与这些帖子的答案一致:
令我困惑的是,我认为声明虚函数的重点在于我不需要定义它.在这个例子中,我不打算创建任何TestFoo实例,而是创建从TestFoo继承的(具体)类的实例.但是,我仍然想为TestFoo的每个子类定义函数nonVirtualFunction.
我不对劲的东西?
谢谢 !
我现在正致力于一个涉及模拟机器人手臂控制的相当复杂的项目.我完成了项目的第一个版本,它工作正常.我刚刚添加了一些新代码,它们在每次迭代时收集有关系统的一些信息,将其保存在某些数组中,最后将所有内容打印在文件中以供以后分析.
现在,真正奇怪的事情正在发生.如果我定义将保存数据的文件如下:
const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\ta";
Run Code Online (Sandbox Code Playgroud)
一切正常,与我添加新代码之前完全相同(加上保存数据).
但如果我将其定义如下:
const std::string SAVEFILE = "C:\\Users\\Vincent\\Desktop\\tacit.txt";
Run Code Online (Sandbox Code Playgroud)
然后系统以另一种方式运行.不会崩溃,但机械臂的移动方式不同.
我试图评论使用SAVEFILE的所有代码,甚至是与数据保存相关的任何新代码,但问题仍然存在.
我知道只有这些信息,任何人都不可能告诉我什么是错的,但有人会有什么建议吗?认为长字符串会覆盖其他变量的值会有意义吗?怎么可能?干净的C++编程的一些准则我可能已经破坏了?
有些阵列是行为不端的声音,这是我检查的第一件事.我想它应该来自保存数据的数组,因为它们是唯一的新数据.事情就是,即使我评论所有相应的代码,也没有变化.
我尝试提供有关我的代码的更多信息.这里我首先使用SAVEFILE(runExperiment函数的最后一个参数)
int main(int argc, char *argv[]) {
std::vector<Controller*> controllers;
controllers.push_back(getConstrainedPDT(0,true));
controllers.push_back(getConstrainedPDT(1,true));
controllers.push_back(getConstrainedPDT(2,true));
runExperiment(controllers,LENGTHS,WEIGHTS,RADIUS,ANGLEMIN,ANGLEMAX,MAXTORQUES,PUSHVECTOR,GRAVITY,RUNTIME,TIMESTEP,XTARGET,YTARGET,ITERATIONSAVEDATA,SAVEFILE);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
这里是函数的代码:
void runExperiment(std::vector<Controller*> controllers,const double * lengths, const double* weights, const double radius, const double* angleMin, const double* angleMax, const double* maxTorques,const double* pushVector,const dReal gravity,const dReal runTime,const dReal tstep,const dReal targetX,const dReal targetY,const int itSaveData,const std::string saveFile){
endTime = runTime;
simTime = 0.0;
timeStep = …Run Code Online (Sandbox Code Playgroud) 以下是一些引发NameError的代码:
class Foo:
a = [1,2,3,4,5]
b = all(i for i in a) # works fine !
c = [2,3,4]
d = all(i in a for i in c) # raises NameError : name 'a' is not defined
Run Code Online (Sandbox Code Playgroud)
我很困惑 - ;
谢谢 !
template<typename T>
class A
{
public:
A(T &t)
: t_(t){}
T t_;
};
int main()
{
int value;
A<decltype(value)> a(value);
// what I wish for : A a(value);
// which does not compile "missing template argument before 'a'"
}
Run Code Online (Sandbox Code Playgroud)
在 A (或其他地方)的声明中有没有办法提示编译器 T 应该自动解析为传递给构造函数的类型?
(理想情况下是 c++11,但很高兴听到不那么旧的版本)
template<typename T>
void print(T& t)
{
std::cout << t << std::endl;
}
template<typename ... Args>
class Container
{
public:
Container(Args&& ... args)
: values_(std::forward<Args>(args)...)
{}
template<int INDEX>
typename std::tuple_element<INDEX, std::tuple<Args...> >::type& get()
{
return std::get<INDEX>(values_);
}
void display()
{
// (obviously) does not compile !
std::apply(print,values_);
}
private:
std::tuple<Args ...> values_;
};
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了意图但不正确(注释的地方),因为函数“print”需要一个模板。
有没有办法将(适当模板化的)打印函数调用到元组 values_ 的每个元素?
运行代码:https : //onlinegdb.com/SJ78rEibD
这是对这个问题的跟进: 有一个函数改变指针在C中表示的值
作为练习,我试图创建一个通用函数来更改未确定类型的数组中的值.我猜它应该是这样的.
void set_value(void * data, void * value, size_t size, int index){
void * position = data + index*size;
*position = *value;
}
Run Code Online (Sandbox Code Playgroud)
当然不编译,*position =*value不使用值大小的信息(这里假设数据和值都指向size_t大小的smthg).
我想对我的程序说的是:"获取按值指向的大小的内存块并将其复制到位置指向的地址"
我运行这个测试:
TEST_F(CHAR_TESTS, wtf){
char letter[3] = {'A','B','C'};
char types[2] = {'o','s'};
char tmp[3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
for(int k=0;k<2;k++){
tmp[0]=letter[i];
tmp[1]=letter[j];
tmp[2]=types[k];
std::string combination(tmp);
std::cout << combination << std::endl;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,这打印这个:
AAo~
AAs~
ABo~
ABs~
ACo~
ACs~
BAo~
BAs~
BBo~
BBs~
BCo~
BCs~
CAo~
CAs~
CBo~
CBs~
CCo~
CCs~
Run Code Online (Sandbox Code Playgroud)
我不认为这是打印本身的问题,因为我注意到一些测试比较了char数组生成的字符串没有通过,我最终做到这一点,我无法弄清楚为什么.所以感觉确实"组合"字符串最终没有预期的内容.
"常规"可执行文件(不是gtest)中的相同代码打印出预期的内容(没有奇怪的补充字符的3个字符).
c++ ×6
python ×3
javascript ×2
string ×2
templates ×2
ansible ×1
apply ×1
c ×1
char ×1
class ×1
codemirror ×1
compilation ×1
constants ×1
decltype ×1
declval ×1
dictionary ×1
docstring ×1
field ×1
fixtures ×1
googletest ×1
hyperlink ×1
inheritance ×1
memory ×1
mkdocs ×1
ode-library ×1
pointers ×1
pytest ×1
stdtuple ×1
ubuntu-20.04 ×1
virtual ×1
vtable ×1