嗨,我正在用linux下的stdlib编程.
gcc针对以下代码行发出以下警告,任何想法为什么会这样?
FILE *fd;
if ( fd = fopen( filename, "rw" )== NULL )
{
Run Code Online (Sandbox Code Playgroud)
并且警告是:
warning: assignment makes pointer from integer without a cast.
Run Code Online (Sandbox Code Playgroud)
如何实现这一点,根据stdlib文档,fopen的返回类型是FILE*.那么为什么还有警告?有什么想法吗?
- 提前致谢 -
我知道如果我有一个vector<int>我可以像这样运行算法:
int max = *max_element(myints.begin(), myints.end());
Run Code Online (Sandbox Code Playgroud)
但是如果我有一个vector<MyStruct>结构中的一个字段是int的话.有没有一种优雅的方法可以在我的所有结构中的int中运行算法?
我的问题与此有关,因为我解决了问题,我编写了自己的排序算法(简单的插入排序),并且它有效.我对此感到非常惊讶,因为我认为标准库已经过充分测试.是否有任何已知的特殊情况std::sort可能会搞乱?
由于某种原因,我在使用c ++中的exit()函数.我从mac运行狮子(64位)得到各种奇怪的错误.我正在编译使用g++ -o -g -Wall.
图表A:
#include <iostream>
int main(int arc, char *argv[]){
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
终端输出如下所示
$ g++ -o -g -Wall test main.cpp
ld: in test, can't link with a main executable for architecture x86_64
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
但$ g++ -o test main.cpp编译得很好.
使用#include<stdio.h>或#include<stdlib.h>导致相同的编译错误.
我只是想知道是否有人能够立即看到这里发生了什么?
假设我有:
class A {
public:
const int x;
A() : x(3) {}
}
Run Code Online (Sandbox Code Playgroud)
我想创造
std::vector<A>
Run Code Online (Sandbox Code Playgroud)
g ++抱怨默认赋值运算符在尝试执行时不起作用this->x = x,因为xconst是无法完成的.有没有办法解决?
我正在使用VS2008(所以我有TR1,但没有C++ 11),我不使用boost.以下描述是我真实问题的简化版本.
我有以下类层次结构:接口,实现它的抽象类和从该抽象类派生的几个类:
struct IMyInterface
{
virtual void MinMax(int& Min, int& Max)const = 0;
};
class Base : public IMyInterface // Abstract
{
// ...
};
class A: public Base
{
public:
virtual void MinMax(int& Min, int& Max)const { // Some stuff for A}
// ...
};
class B: public Base
{
public:
virtual void MinMax(int& Min, int& Max)const { // Some stuff for B}
// ...
};
Run Code Online (Sandbox Code Playgroud)
然后我有一个到base类的shared_ptr向量:
// Somewhere in my code
typedef shared_ptr<Base> Base_sp;
vector<Base_sp> …Run Code Online (Sandbox Code Playgroud) 我在以下结构上使用std :: find收到错误...
struct ComplianceOrderRecord {
explicit ComplianceOrderRecord(IOrder& order);
bool operator ==(const ComplianceOrderRecord& other) const;
double price;
};
inline bool ComplianceOrderRecord::operator ==(const ComplianceOrderRecord& other) const {
return price == other.price;
}
Run Code Online (Sandbox Code Playgroud)
我用它如下......
inline void Compliance::RemoveComplianceOrderRecord(const ComplianceOrderRecord& order) {
auto it = std::find(m_compliantOrderList.begin(),
m_compliantOrderList.end(), order);
if(it == m_compliantOrderList.end()) {
return;
}
m_compliantOrderList.erase(it);
}
Run Code Online (Sandbox Code Playgroud)
错误是......
error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const ComplianceOrderRecord' (or there is no acceptable conversion)
Run Code Online (Sandbox Code Playgroud)
任何帮助理解这个错误将非常感激.
我使用了system("pause")它stdio.h,它没有错误地工作.当我查看stdio函数时,system()是在stdlib中.它是如何工作的,这是代码?
#include <stdio.h>
int main() {
printf("Hello World\n" );
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有一个字符串,实际上包含一个数字和一个字符串,,例如,由"12,fooBar".
我想将它放入分离的变量中,即数字输入unsigned int myNum和字符串输入std::string myStr.
我有以下剪辑代码:
size_t pos1=value.find(',');
std::cout << value.substr(0, pos1) << " and "
<< (value.substr(0, pos1)).c_str() << std::endl;
Run Code Online (Sandbox Code Playgroud)
这产生了12 and 1.我错过了什么?2第二部分发生了什么?
注意:我将问题隔离到了这段代码中.我需要c_str()通过它atoi来获得unsigend int.在这里,我不想打印第二部分.
更新:我实际上从levelDB获取字符串Get.如果我把一个像我放在这里的测试字符串,它就可以了.
我想在"操纵向量"函数中访问向量,方法与访问带有vector [i]的数组相同,而不是在下面的代码中的(i)处使用vector->.我试图直接传递矢量,而不是像数组那样的指针.但这似乎破坏了该计划.任何想法如何实现这一目标?我是使用std库的新手,因为我主要有C的经验.
#include <vector>
#include <iostream>
#define vectorsize 5
struct st_test {
int ii;
float dd;
};
void manipulatevector(std::vector<struct st_test> *test) {
test->resize(vectorsize);
for(int i=0;i<vectorsize;i++) {
test->at(i).dd = i*0.4f;
test->at(i).ii = i;
}
}
void manipulatearray(struct st_test test[vectorsize]) {
for(int i=0;i<vectorsize;i++) {
test[i].dd = i*0.4f;
test[i].ii = i;
}
}
void main() {
std::vector<struct st_test> test1;
manipulatevector(&test1);
struct st_test test2[vectorsize];
manipulatearray(test2);
std::cout << "Vector" << std::endl;
for(int i=0;i<vectorsize;i++) {
std::cout << test1.at(i).dd << std::endl;
}
std::cout << "Array" << std::endl; …Run Code Online (Sandbox Code Playgroud)