gpt4 book ai didi

C++ 代码在 CodeBlocks 中构建,但不在 Visual Studio 2015 中构建

转载 作者:行者123 更新时间:2023-11-30 05:03:52 25 4
gpt4 key购买 nike

我在参加的 C++ 类(class)中获得了示例代码。我可以在 CodeBlocks 中构建它,但不能在 Visual Studio 2015 中构建。在 Visual Studio 中,主线“rename test3;”引发查找分号的错误,并且该行中的变量声明“重命名”未按类型的默认绿色突出显示。下一行也一样。因此 test3 和 test4 未定义。如果我删除“#include <iostream>”,“重命名”在第 33 行和第 34 行变为绿色,但标准包含变得未定义。实现“using namespace std”也无济于事。我试图摆脱“using namespace std”,因为根据我在这里的理解,这不是好的编码习惯。我想我缺少一个 VS 设置。

//#include <iostream>  // original first two line
//using namespace std; //
#include <iostream>
#include <cstring> // I added this include
using std::cin; // I added the following using lines
using std::cout;
using std::endl;

class feature { // this class has a specific feature

private:
char data[16];
public:
feature() { strcpy(data, "default"); }
feature(char * in) { strcpy(data, in); } // error checks needed

void set(char * in) { strcpy(data, in); }
void out() { cout << data << endl; }

};

class rename : private feature {
public:
void reset(char * in) { set(in); }
void print() { out(); }
rename() : feature() {}
rename(char * in) : feature(in) {}
};


int main() {
feature test1;
feature test2("test2 data");

rename test3;
rename test4("test4 data");

test1.out();
test2.out();
test3.print();
test4.print();
}

结果应该是:

default
test2 data
default
test4 data
default
test4 data

如果我改回原来的前两行,代码将不起作用。如果我将“rename”重命名为“rename1”,那么代码就可以工作。

#include <iostream>
using namespace std;


class feature { // this class has a specific feature

private:
char data[16];
public:
feature() { strcpy(data, "default"); }
feature(char * in) { strcpy(data, in); } // error checks needed

void set(char * in) { strcpy(data, in); }
void out() { cout << data << endl; }

};

class rename1 : private feature {
public:
void reset(char * in) { set(in); }
void print() { out(); }
rename1() : feature() {}
rename1(char * in) : feature(in) {}
};


int main() {
feature test1;
feature test2("test2 data");

rename1 test3;
rename1 test4("test4 data");

test1.out();
test2.out();
test3.print();
test4.print();
}

最佳答案

rename 是一个包含在标题中的函数 <cstring>在 Visual Studio 中,这会导致与您的类的名称发生冲突。因此,您需要更改派生类的名称。 Visual Studio 可能还会要求您更改 strcpystrcpy_s (否则它可能会给出警告或错误)。

理想情况下,您应该避免在您编写的新代码中使用 C 兼容性 header (除非您绝对需要它们),例如:在您的示例中,您应该坚持 std::string而不是 char*

关于C++ 代码在 CodeBlocks 中构建,但不在 Visual Studio 2015 中构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49211278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com