小编Flo*_*lla的帖子

为什么允许声明一个大小取决于用户输入的自动数组?

我正在使用MinGW来编译C++ 11,我发现这不会引发错误:

int S;
cin>>S;
char array[S];
Run Code Online (Sandbox Code Playgroud)

虽然这样做("'数组'的存储大小未知"):

char array[];
Run Code Online (Sandbox Code Playgroud)

对我来说,第一种情况下的大小也是未知的,因为它取决于用户输入的内容.

据我所知,自动数组在编译时分配在堆栈内存中.那么为什么第一个例子不会失败呢?

c++ arrays stack variable-length-array

15
推荐指数
2
解决办法
823
查看次数

通过值传递的C++向量:我做对了吗?

假设我有一个像这样的结构:

struct typeA
{
    long first;
    string second
    double third;
};
Run Code Online (Sandbox Code Playgroud)

如果我宣布

typeA myArray[100];
Run Code Online (Sandbox Code Playgroud)

然后myArray存储在堆栈中,消耗sizeof(typeA)*100字节的垃圾数据(直到我存储一些实际数据,至少).

每当我将这个数组作为参数传递时,我总是会将指针传递给堆栈中第一个元素.所以指针从堆栈到堆栈.

但是,如果我宣布

vector<int> myVector (4, 100);
Run Code Online (Sandbox Code Playgroud)

然后myVector对象实际存储在堆栈中,它包含一个指向存储在堆中的4*sizeof(int)字节数组的第一个元素的指针,存储实际数据.所以指针从堆栈转到堆栈.

每当我将此向量作为参数传递时,如果我将其添加到参数列表中,如下所示:

vector<int> parameterVector
Run Code Online (Sandbox Code Playgroud)

该函数获取myVector对象副本并将其存储在堆栈中.

但如果我这样做:

vector<int> &parameterVector
Run Code Online (Sandbox Code Playgroud)

该函数获取存储在堆栈中的myVector引用,因此我现在有一个存储在堆栈中的变量,引用一个也存储在堆栈中的myVector对象,它包含一个指向存储在堆中的实际元素数组的指针.

它是否正确?

我有点怀疑:

  1. 实际的元素是否存储在堆中的静态数组(从C继承的那些,用方括号表示)中?
  2. myVector对象是否只有一个指向第一个元素的指针,或者它有多个指向每个元素的指针?
  3. 因此,按值传递矢量并不会造成太大问题,因为复制的唯一内容是矢量对象,而不是实际元素.是这样吗?
  4. 如果我把整个事情弄错了,并且在按值传递矢量参数时也会复制实际元素,那么为什么C++允许这样做,考虑到它会阻止静态数组呢?(据我所知,静态数组总是作为对第一个元素的引用传递).

谢谢!

c++ vector heap-memory

5
推荐指数
1
解决办法
3033
查看次数

Robot Framework:为什么套件设置似乎无法正常工作?

我在 java 上使用 RF(通过 Hi-Fi selenium-java 实现)。我目前有一个 Java 类,我正在其中实现一个名为 Driver Setup 的关键字来设置浏览器驱动程序的路径。

事情是,我应该能够进行套件设置和拆卸,__init__.robot但似乎有些事情并没有像我预期的那样工作。我的套件设置是设置 selenium 驱动程序路径(我的Driver Setup关键字)。所以我这样做了:

*** Settings ***
Suite Setup                 Driver Setup
Test Setup                  Open Browser   ${my app url}  chrome
Test Teardown               Close Browser
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法执行Driver Setup,因为我得到:Parent suite setup failed: No keyword with name 'Driver Setup' found.但是,如果我执行Test Setup而不是套件设置,则一切正常并且测试成功运行。

因此,作为一种解决方法,我必须这样做:

*** Settings ***
Test Setup                  Run Keywords    Driver Setup    AND     Open Browser     ${my app url}  chrome
Test Teardown               Close Browser
Run Code Online (Sandbox Code Playgroud)

对于上下文: …

java robotframework

5
推荐指数
1
解决办法
1508
查看次数

Robot Framework+Selenium:如何避免“陈旧元素”错误(片状测试)?

我正在使用 Robot Framework 和 Selenium 来测试具有语言选择器的网站。我需要能够选择一种语言,然后验证页面实际上已更改为该语言。

由于在选择一种新语言lang后,<html>标签属性中的值发生了变化,我决定使用它来验证语言是否已成功更改。但是我得到了不稳定的结果,因为我的测试有时通过有时不通过。

这是我使用的关键字的定义:

CHANGE LANGUAGE  
  [Arguments]                        ${lang}
  Select From List By Value          ${LANGUAGE SWITCH}  ?hl=${lang}
  Wait Until Page Contains Element   css=html
  ${doc lang}                        Get Element Attribute  css=html@lang
  Should Be True                     '${doc lang}'=='${lang}'   timeout=15s
Run Code Online (Sandbox Code Playgroud)

由于我必须多次执行此关键字(每种可用语言执行一次),因此我经常收到可怕的“陈旧元素”错误:| FAIL | stale element reference: element is not attached to the page document.

我通读了这篇文章和这里的其他一些问题,并了解如果在获取元素引用后更新元素引用,可能会发生这种情况。但是,我不确定应该如何修改关键字以避免出现此错误。

selenium robotframework

5
推荐指数
2
解决办法
9498
查看次数

是否可以在 Flutter 应用程序中运行 Python 解释器?

我是 Flutter 的新手并第一次尝试它(我也不是经验丰富的移动开发人员)并且想知道如何在我的应用程序中运行 Python 解释器。

我真正想要创建的是一个带有 Python 套路或挑战的应用程序,这样当用户解决一个挑战时,它会告诉他们它是否通过了一些测试(我假设我将这些作为单元测试编写)。

不知道从哪里开始,虽然......我什至不确定 Flutter 是最好的选择,但由于它听起来很有前途,而且我可以为 Android 和 iOS 编译我的应用程序,我决定给它一个走。因此,非常欢迎有关如何开始构建此应用程序的任何指导。

python android flutter

5
推荐指数
1
解决办法
4652
查看次数

我究竟如何在Asp.NET MVC 4中使用Roles?

我一直在阅读大量的文章和论坛,但我仍然无法弄明白...我正在使用Visual Studio Express 2012 for Web构建一个互联网应用程序,使用MVC4 + Razor + Entity Framework CodeFirst.

据我所知,使用SimpleMembership管理MVC4中的用户和角色比以前的版本更简单,应该相当简单.

在我的应用程序中,我只需要授权某些用户组(例如,只有管理员才能访问某些页面).我理解这是通过将参数传递给[Authorize]注释:[Authorize(Roles ="Admins")]但是如何创建这些角色以及如何向其添加用户?

为了要求身份验证,我在控制器方法的基础上添加了注释[Authorize](没有参数),并且无需进行任何额外配置或添加任何其他内容即可工作.此外,当我查看自动创建的数据库时,我看到一个名为webpages_UsersInRoles的表,其中包含UserId和RoleId列.所有这一切使我认为这必须是一个非常简单的任务,因为所有似乎已经准备好并且可以使用,但我无法弄清楚如何;)

到目前为止我尝试过(它没有用)是这样的:我有一个继承自DropCreateDatabaseIfModelChanges的"DataContextDbInitializer"类.Seed方法在该类中被覆盖,我添加了这个(我必须导入System.Web.Security):

Membership.CreateUser("user1", "123456");
Roles.CreateRole("Admins");
Roles.AddUserToRole("user1", "Admins");
Run Code Online (Sandbox Code Playgroud)

我还在Web.config文件的标记中插入了此标记:

<roleManager
enabled="true"
cacheRolesInCookie="true" >
</roleManager>
Run Code Online (Sandbox Code Playgroud)

为了尝试一下,我在控制器中的操作方法之上添加了[Authorize(Roles ="Admins")],然后以"admin"身份登录并尝试访问该方法,但没有运气:(

我不知道还有什么我想念的...如果有人能引导我完成这件事我真的很开心,因为它让我疯狂:P

谢谢!

membership roles asp.net-mvc-4 visual-studio-2012

4
推荐指数
1
解决办法
4227
查看次数

机器人框架:如何获取 selenium webdriver 的当前实例来编写自己的关键字?

我有一个java中由maven驱动的Robot-framework项目,它使用selenium 3.4.0依赖项、robotframework 3.0.2依赖项、markusbernhardt的selenium2library版本1.4.0.8和robotframework-maven-plugin版本1.4.7。

我的机器人测试位于src/main/test/robotframework/acceptance文件夹中,而在src/main/java/mypackage中,我创建了一个 Customized.java 文件来设置浏览器驱动程序路径的系统属性(然后我将此库导入到我的测试:

*** Settings ***
Library             Selenium2Library
Library             mypackage.Customized
Run Code Online (Sandbox Code Playgroud)

这非常有效。但现在我想实现我自己的关键字来扩展 Selenium2Library。但我不确定如何获取当前正在运行的 WebDriver 实例。

我的意思是,如果我不使用 Robot 而只是使用普通 Selenium,我会做这样的事情:

WebDriver driver=new ChromeDriver();
driver.doSomething();
Run Code Online (Sandbox Code Playgroud)

然而,在这种情况下,我不想实例化一个新的 WebDriver,而是获取当前正在运行的 WebDriver(机器人自动实例化的)。我怎样才能做到这一点?

到目前为止,我已经创建了一个Selenium2Library对象并将其设置为返回的值Selenium2Library.getLibraryInstance();,但这并没有让我访问 selenium 的方法(例如: getCurrentUrl() 未列出)。

java selenium robotframework

3
推荐指数
1
解决办法
5189
查看次数

Qt C++:如何添加一个简单的倒计时器?

我是 Qt C++ 的新手,从我在网上找到的少数资源中,我无法仅提取向表单添加倒计时器所需的部分。我不想添加任何按钮或其他功能。只需要一个计时器从 1:00 开始,然后逐渐减少,直到到达 0:00,此时我需要向用户显示某种消息,指示时间已到。我想也许添加一个标签来显示计时器将是一个简单的方法(但现在确定我是否正确)。

到目前为止,我创建了一个新的 Qt 应用程序项目,在主窗体中添加了一个标签,并向 mainwindow.cpp 添加了一些计时器代码,这些代码来自我在http://doc.qt.io/archives/qt-4.8/timers.html获得的内容:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //Initialize "countdown" label text
    ui->countdown->setText("1:00");

    //Connect timer to slot so it gets updated
    timer = new QTimer();
    connect(timer, SIGNAL(timeout()), this, SLOT(updateCountdown()));

    //It is started with a value of 1000 milliseconds, indicating that it will time out every second.
    timer->start(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::updateCountdown()
{
    //do something along the lines of …
Run Code Online (Sandbox Code Playgroud)

c++ qt timer

3
推荐指数
1
解决办法
1万
查看次数

C++ Qt:是否可以创建一种模板插槽?

我是Qt的新手而不是C++专家所以请耐心等待.我正在开发一个具有12种不同QPushButtons的应用程序,但它们都执行非常类似的操作:它们从地图中获取一些值,然后使用它来设置该按钮的样式:

void MainWindow::on_btn01_clicked(){
    QString img=images["btn01"];
    ui->btn01->setStyleSheet("#btn01{ background-image: url(://" + img + ") }");
}
Run Code Online (Sandbox Code Playgroud)

对于12个按钮中的每一个,我必须创建一个仅在使用的按钮上有所不同的插槽.因此,创建几乎完全相同的12个函数看起来有点奇怪.

有一个更好的方法吗?

c++ qt

3
推荐指数
1
解决办法
151
查看次数

假设容器值会自动创建,这是不好的做法吗?

假设我在C++中有一个映射,其中字符串作为键,整数组作为值,我将在从某些源读取时添加对(即:我无法在代码中初始化映射,因为我不知道什么键将从源头读取).使用map ["someKey"]来插入(someIntValue)时,在阅读时动态添加元素是不好的做法?

我的意思是这样的(不是真正的代码,只是一个例子):

map<string, set<int>> myMap;
while (reading_from_source(something)){
    string key=obtainKeyFromSource();
    myMap[key].insert(obtainIntFromSource());
}
Run Code Online (Sandbox Code Playgroud)

令我担心的是,我只是说"会有一个地图,它会设置为值",但我从未真正创建过这些设置,我只是开始向它们插入元素.

如果这是不好的做法,那么正确的方法是什么?

c++ dictionary

1
推荐指数
1
解决办法
79
查看次数

如何将参数传递给黄瓜 + Maven 项目,以便它们可以在测试中使用?

当我运行它时,我需要能够将用户名和密码传递给我的测试套件。我不确定这样做的最佳方法是什么。

我的项目使用 Cucumber 在 Java 上运行,使用 Maven。

如果它只是一个 java 项目,我可能会有一个 main 方法,我可以在其中获取执行项目时传递的参数。但是因为这里有黄瓜,有它的特性文件,然后是一些用于测试实现的 java 类,我不知道该怎么做。

cucumber maven

0
推荐指数
1
解决办法
1430
查看次数