小编Man*_*uel的帖子

使用g ++编译时,哪个C++标准是默认的?

我有一段代码如下所示.让我们说它在一个名为的文件中example.cpp

#include <fstream>
#include <string> // line added after edit for clarity

int main() {
    std::string filename = "input.txt";
    std::ifstream in(filename);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在Windows上,如果我输入cmd命令g++ example.cpp,它将失败.这是一个很长的错误列表,我认为主要是由于链接器抱怨无法转换stringconst char*.

但是如果我使用像这样的附加参数运行编译器:g++ -std=c++17 example.cpp它将编译并正常工作而没有任何问题.

当我运行前命令时会发生什么?我猜测C++编译器的默认版本标准被调用,但我不知道哪个?作为程序员/开发人员,我应该总是使用后一个命令和额外的参数吗?

c++ mingw g++

32
推荐指数
7
解决办法
2万
查看次数

为什么在实现标题中定义的模板化函数和类时使用"tpp"文件?

请参阅此问题中有关实施模板的第一个答案.

具体来说,请注意这个引用

一个常见的解决方案是在头文件中编写模板声明,然后在实现文件(例如.tpp)中实现该类,并在头的末尾包含此实现文件.

我加粗了我最感兴趣的部分
..tpp文件的意义是什么?我尝试完全按照该页面中的建议进行操作.但后来,我将文件扩展名更改为任何随机乱码(如.zz或.ypp),它仍然有效!它应该工作吗?是否.tpp或任何其他扩展名是否重要?为什么不使用.cpp?

这是我很困惑的另一件事.
如果我的实现是用.cpp编写的,并且头文件定义了非模板化的函数,那么我只需要编译一次.cpp文件,对吧?至少在我改变.cpp文件中的内容之前.

但是,如果我有一个定义模板化函数的标题,并且我的实现是在一个带有随机时髦扩展的文件中,它是如何编译的?每次编译任何源代码#include的头部时,编译的实现是什么?

c++ templates

9
推荐指数
2
解决办法
9434
查看次数

"发射失败.找不到二进制文件." CDT Kepler Eclipse上的错误

运行或调试任何东西给我一个非常令人沮丧的"启动失败.找不到二进制"错误.我正在使用安装了CDT插件的Eclipse(具体来说,我安装了MinGW软件包).

我已经尝试将用户和系统PATH变量都设置为包含my(MinGW目录)/ bin

我还尝试在运行之前构建程序.

我还确保启用了项目设置下的PE Windows Parser.

我去了Project Properties> Run/Debug Settings> New> C/C++ Application> Environment> Select>,然后我选择了Path

我还尝试将主选项卡中的C/C++应用程序设置为通过构建程序生成的可执行文件,但是在构建程序时没有生成这样的文件.不过,我严重怀疑这是导致问题的原因.

我的选项用完了,问题仍然存在.还有什么需要做的?我究竟做错了什么?

当我查看MinGW的安装说明时,本教程将mingw基本软件包引用为安装MinGW后要安装的软件包.但是mingw base不适合我.相反,我看到mingw32基地.可能是64位程序Eclipse试图运行32位代码吗?那是怎么回事?如果这是问题,我该如何解决?

c++ eclipse eclipse-cdt mingw32

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

如何增加 VirtualBox 屏幕的尺寸?

我尝试在 VirtualBox 5.1.28 中运行 Arch Linux,其中主机操作系统是 Windows 10。问题是显示尺寸太小,即使我最大化窗口尺寸也是如此。查看此屏幕截图以了解我的意思:

VirtualBox 中的 Arch Linux 5.1.28

我用谷歌搜索了这个问题,但我遇到的每个潜在解决方案都说要安装 Guest Additions,但正如您从上面的屏幕截图中看到的,我没有安装 Guest Additions 的选项。

linux virtualbox

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

如果将变量设置为等于新对象,旧对象会发生什么?

假设我们有一个没有重载operator=()函数的类X.

class X {
    int n;

    X() {n = 0;}
    X(int _n) {n = _n;}
};

int main() {
    X a;    // (1) an object gets constructed here

    // more code...

    a = X(7);    // (2) another object gets constructed here (?)

    // some more code...

    a = X(12);    // (3) yet another object constructed here (?)
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否在(2)构造了一个新对象?如果是,那么在(1)构造的旧对象会发生什么?是自动销毁还是解除分配(这是它)?它被覆盖了吗?

又在(3)的代码中发生了什么?

最重要的是,是否有可能通过编写如上所述的代码来导致内存泄漏?

c++

4
推荐指数
2
解决办法
217
查看次数

使用Drive API/DriveApp将PDF转换为Google文档

此问题已成功解决.我正在编辑我的帖子,以记录我的后代和未来参考的经验.

任务

我有117个PDF文件(平均大小~238 KB)上传到Google云端硬盘.我想将它们全部转换为Google文档,并将它们保存在不同的Drive文件夹中.

问题

我尝试使用Drive.Files.insert转换文件.但是,在大多数情况下,只有5个文件可以在函数过早失效之前以这种方式转换

限制超出:DriveApp.(行号,文件"代码")

上面引用的行insert是调用函数的位置.在第一次调用此函数后,后续调用通常会立即失败,而不会创建其他Google doc.

途径

我用3种主要方法来实现我的目标.一个是使用Drive.Files.insert,如上所述.另外两个涉及使用Drive.Files.copy并发送一批HTTP请求.最后两种方法由Tanaike提出,我建议阅读下面的答案以获取更多信息.这些insertcopy功能来自Google Drive REST v2 API,而批处理多个HTTP请求来自Drive REST v3.

使用Drive.Files.insert,我遇到了处理执行限制的问题(在上面的问题部分中进行了解释).一种解决方案是多次运行这些功能.为此,我需要一种方法来跟踪转换的文件.我有两种选择:使用电子表格和延续令牌.因此,我有4种不同的方法来测试:本段中提到的两种方法,批处理HTTP请求,以及调用Drive.Files.copy.

由于团队驱动器的行为与常规驱动器不同,我觉得有必要两次尝试这些方法,其中一个包含PDF的文件夹是常规的非Team Drive文件夹,另一个文件夹在Team Drive下.总的来说,这意味着我有8种不同的测试方法.

这些是我使用的确切功能.其中每个都使用了两次,唯一的变化是源文件夹和目标文件夹的ID(由于上述原因):

方法A:使用Drive.Files.insert和电子表格

function toDocs() {
  var sheet = SpreadsheetApp.openById(/* spreadsheet id*/).getSheets()[0];
  var range = sheet.getRange("A2:E118");
  var table = range.getValues();
  var len = table.length;
  var resources = {
    title: null, …
Run Code Online (Sandbox Code Playgroud)

javascript google-apps-script google-drive-api

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

为什么我的数组中的最后一个元素会覆盖以前的所有元素?

import java.util.Random;

public class B {
private class C {
    int[] data = new int[5];
    C (int[] input) {data = input;}

    void print() {
        for (int i=0; i<5; i++)
            System.out.print(data[i] + " " );
        System.out.println();
    }
}

C[] c;

B () {
    Random r = new Random();
    c = new C[5];
    int[] t = new int[5];

    for (int i=0; i<5; i++) {
        for (int j=0; j<5; j++)
            t[j] = r.nextInt(10) + 1;
        c[i] = new C(t);
        t = new int[5]; …
Run Code Online (Sandbox Code Playgroud)

java arrays object

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

为什么for-each循环不接受Iterable类的实例?

Iterable<Position<Integer>> iterable = list.positions();
    Iterator<Position<Integer>> iter = iterable.iterator();

    while (iter.hasNext()) {
        System.out.println(iter.next().getData());
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码没有问题.list只是我写的List类的一个实例.它包含Integer类型的元素.

        for (Position<Integer> pos : iterable) {

    }
Run Code Online (Sandbox Code Playgroud)

此代码在冒号后面的部分失败.这应该等同于第一段代码,即带有while循环的代码.所以我不明白为什么for-each循环有错误.错误说:"只能迭代数组或java.lang.Iterable的实例" - 但iterable已经是Iterable,不是吗?我在这里错过了什么?

以下是实现上述方法和类型的完整代码.

    private class PositionIterator implements Iterator<Position<E>> {
    private Position<E> cursor = first();
    private Position<E> current = null;

    public boolean hasNext() {
        return cursor.getData() != null;
    }

    public Position<E> next() {
        if (cursor == null) throw new NoSuchElementException("reached the end of the list");
        current = cursor;
        cursor = after(cursor);
        return current;
    }
} …
Run Code Online (Sandbox Code Playgroud)

java

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

如何使用for-each循环扫描int数组对象?

如果我使用new如下所示创建一个新的int数组对象:

int *array = new int[20];
Run Code Online (Sandbox Code Playgroud)

并使用一些整数填充数组,然后尝试使用for-each循环扫描该数组将给我一个错误:

for (int x : array)  // error
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?我尝试使用引用器和地址符号(*&),但我尝试的每个组合都失败了.

恩.

for (int &x : *array)  // does not work either.
Run Code Online (Sandbox Code Playgroud)

c++ arrays for-loop

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

如何将fstream对象用作成员变量?

以前,我会将fstream对象的地址传递给执行I/O操作的任何函数,包括构造函数.但我想尝试将fstream对象作为成员变量使用,以便所有后续I/O操作都可以使用这些变量而不是将它们作为参数传递.

考虑以下Java程序:

public class A {
    Scanner sc;

    public A(Scanner read) {
        sc = read;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是C++相当于此?我试过这样做

class A {
    ofstream *out;

    public:
        A (ofstream &output) {
            out = output;
        }
};
Run Code Online (Sandbox Code Playgroud)

但这给了我一个编译错误:

[错误]无效的用户定义从'std :: ofstream {aka std :: basic_ofstream}'转换为'std :: ofstream*{aka std :: basic_ofstream*}'[-fpermissive]

c++ io fstream

-2
推荐指数
1
解决办法
1380
查看次数