__thiscall fstream::fstream(int) 的原因

本文探讨了在VC++环境中使用fstream类时遇到的问题及解决方案,包括命名空间使用、文件读写操作及编译错误处理。

我在下面程序尝试的时候,没有错误,但是一移到我现在做的工程中就出现这种错误

#include     <stdlib.h>
#include  <io.h>
#include   <afx.h>
#include   <fstream>  
#include  "iostream.h"
#include <MALLOC.H>

using   namespace   std; 
void main()
{
 //读文件
 fstream filewrite("c:\\text.txt",ios_base::out);
 char buf[] = "20";
 filewrite.write(buf,sizeof(buf));
 filewrite.close();

//读取文件内容并输出
 
 int len;
 char* buf1;
 //fstream sfs;
 //sfs.open(TEST_FILE);
 fstream sfs("c:\\text.txt");
 //定位到文件末尾
 sfs.seekg (0, ios_base::end);
 //返回地址,也就相当于获得文件的长度
 len = sfs.tellg();
 //获取完毕之后,将文件指针提到前面
 sfs.seekg (0, ios_base::beg);
 buf1 = new char[len];
 sfs.read(buf1, len);
 cout << buf1 << endl;


 int cishu;
 int *pass;
 FILE *fp;
 fp=fopen("c:\\text.txt","r");  
  if   (fp==NULL)  
  {  
  printf("文件无法打开!\n");  
  return;  
  }  
  else  
  while(!feof(fp))//如果没有读到数据  
  {  
  pass=(int   *)malloc(sizeof(int));  
  fscanf(fp,"%d\n",pass);  
  cishu=*pass;  
  cout<<cishu<<endl;
  free(pass);

  } 

 cishu--;
 fstream filewrite2("c:\\text.txt");
 filewrite2<<cishu<<endl;

 delete []buf1;
 sfs.close();
}

同一个cpp文件里面,ifstream   和ofstream都可以正常使用 我把fstream换成ifstream就不出错,没解决掉,最后没办法都换成ifstream 和ofstream了

还有例如fstream filewrite("c:\\text.txt",ios_base::out);  ios_base::out是需要
using   namespace   std; 的  但是我加入using   namespace   std;后无法找到std命名空间,

将#include <iostream.h>改为#include <iostream>即可,因为#include <iostream.h>是旧的编译方式。

但是修改后 会出现 error C2872: 'ofstream' : ambiguous symbol

vc++编译器真是喜欢开玩笑啊!!!无奈取消使用命名空间ios_base::out等全部删除掉

||=== Build file: "no target" in "no project" (compiler: unknown) ===| D:\1.cpp||In member function 'void GradeManager::load_from_file(const string&)':| D:\1.cpp|65|error: no matching function for call to 'std::basic_ifstream<char>::basic_ifstream(const string&)'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|495|note: candidate: std::basic_ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|495|note: no known conversion for argument 1 from 'const string {aka const std::__cxx11::basic_string<char>}' to 'const char*'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|481|note: candidate: std::basic_ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std::char_traits<char>]| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|481|note: candidate expects 0 arguments, 1 provided| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|455|note: candidate: std::basic_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|455|note: no known conversion for argument 1 from 'const string {aka const std::__cxx11::basic_string<char>}' to 'const std::basic_ifstream<char>&'| D:\1.cpp|75|error: variable 'std::istringstream iss' has initializer but incomplete type| D:\1.cpp||In member function 'void GradeManager::save_to_file(const string&)':| D:\1.cpp|82|error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(const string&)'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|697|note: candidate: std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|697|note: no known conversion for argument 1 from 'const string {aka const std::__cxx11::basic_string<char>}' to 'const char*'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|682|note: candidate: std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char; _Traits = std::char_traits<char>]| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|682|note: candidate expects 0 arguments, 1 provided| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|656|note: candidate: std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\fstream|656|note: no known conversion for argument 1 from 'const string {aka const std::__cxx11::basic_string<char>}' to 'const std::basic_ofstream<char>&'| D:\1.cpp|88|warning: range-based 'for' loops only available with -std=c++11 or -std=gnu++11| D:\1.cpp|89|error: request for member 'name' in 's', which is of non-class type 'const int'| D:\1.cpp|89|error: 'grade' was not declared in this scope| D:\1.cpp||In member function 'bool GradeManager::modify_student(const string&)':| D:\1.cpp|98|warning: range-based 'for' loops only available with -std=c++11 or -std=gnu++11| D:\1.cpp|99|error: request for member 'name' in 's', which is of non-class type 'int'| D:\1.cpp|101|error: request for member 'read' in 's', which is of non-class type 'int'| D:\1.cpp||In member function 'bool GradeManager::delete_student(const string&)':| D:\1.cpp|109|error: 'it' does not name a type| D:\1.cpp|110|error: expected primary-expression before ')' token| D:\1.cpp|112|error: 'it' was not declared in this scope| D:\1.cpp||In member function 'Student_info* GradeManager::find_student(const string&)':| D:\1.cpp|120|warning: range-based 'for' loops only available with -std=c++11 or -std=gnu++11| D:\1.cpp|121|error: request for member 'name' in 's', which is of non-class type 'int'| D:\1.cpp|122|error: cannot convert 'int*' to 'Student_info*' in return| D:\1.cpp|125|error: 'nullptr' was not declared in this scope| D:\1.cpp|13|error: 'std::__cxx11::string Student_info::name' is private| D:\1.cpp|131|error: within this context| D:\1.cpp||In member function 'void GradeManager::sort_by_name()':| D:\1.cpp|132|warning: lambda expressions only available with -std=c++11 or -std=gnu++11| D:\1.cpp|132|error: no matching function for call to 'sort(std::vector<Student_info>::iterator, std::vector<Student_info>::iterator, GradeManager::sort_by_name()::<lambda(const Student_info&, const Student_info&)>)'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4689|note: candidate: template<class _RAIter> void std::sort(_RAIter, _RAIter)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4689|note: template argument deduction/substitution failed:| D:\1.cpp|132|note: candidate expects 2 arguments, 3 provided| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4718|note: candidate: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4718|note: template argument deduction/substitution failed:| D:\1.cpp|132|required from here| D:\1.cpp|132|error: template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'GradeManager::sort_by_name()::<lambda(const Student_info&, const Student_info&)>'| D:\1.cpp|132|error: trying to instantiate 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)'| D:\1.cpp|138|error: 'grade' was not declared in this scope| D:\1.cpp||In member function 'void GradeManager::sort_by_grade()':| D:\1.cpp|139|warning: lambda expressions only available with -std=c++11 or -std=gnu++11| D:\1.cpp|139|error: no matching function for call to 'sort(std::vector<Student_info>::iterator, std::vector<Student_info>::iterator, GradeManager::sort_by_grade()::<lambda(const Student_info&, const Student_info&)>)'| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4689|note: candidate: template<class _RAIter> void std::sort(_RAIter, _RAIter)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4689|note: template argument deduction/substitution failed:| D:\1.cpp|139|note: candidate expects 2 arguments, 3 provided| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4718|note: candidate: template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)| D:\CodeBlocks\MinGW\lib\gcc\mingw32\5.1.0\include\c++\bits\stl_algo.h|4718|note: template argument deduction/substitution failed:| D:\1.cpp|139|required from here| D:\1.cpp|139|error: template argument for 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)' uses local type 'GradeManager::sort_by_grade()::<lambda(const Student_info&, const Student_info&)>'| D:\1.cpp|139|error: trying to instantiate 'template<class _RAIter, class _Compare> void std::sort(_RAIter, _RAIter, _Compare)'| D:\1.cpp||In member function 'void GradeManager::display_all()':| D:\1.cpp|143|warning: range-based 'for' loops only available with -std=c++11 or -std=gnu++11| D:\1.cpp|144|error: request for member 'name' in 's', which is of non-class type 'const int'| D:\1.cpp|144|error: 'grade' was not declared in this scope| D:\1.cpp||In function 'int main()':| D:\1.cpp|13|error: 'std::__cxx11::string Student_info::name' is private| D:\1.cpp|182|error: within this context| D:\1.cpp|182|error: 'grade' was not declared in this scope| ||=== Build failed: 27 error(s), 8 warning(s) (0 minute(s), 1 second(s)) ===|
06-19
#include <iostream> #include <cmath> #include <chrono> #include <thread> #include <vector> #include <gmpxx.h> #include <fstream> #include <sstream> #include <iomanip> #include <mutex> #include <atomic> #include <sys/sysinfo.h> #include <sys/resource.h> #include <fstream> #include <unistd.h> #include <nvml.h> // NVIDIA GPU监控 std::mutex output_mutex; std::atomic<bool> stop_monitor(false); mpf_class pi_value(0, 0); // 高精度π值 std::atomic<int> iteration_count(0); // 获取CPU使用率 double get_cpu_usage() { static uint64_t last_total = 0, last_idle = 0; std::ifstream stat_file("/proc/stat"); std::string line; std::getline(stat_file, line); std::istringstream iss(line); std::string cpu; uint64_t user, nice, system, idle, iowait, irq, softirq, steal; iss >> cpu >> user >> nice >> system >> idle >> iowait >> irq >> softirq >> steal; uint64_t total = user + nice + system + irq + softirq + steal; uint64_t idle_time = idle + iowait; double usage = 0.0; if (last_total != 0) { uint64_t total_diff = total - last_total; uint64_t idle_diff = idle_time - last_idle; usage = 100.0 * (1.0 - static_cast<double>(idle_diff) / total_diff); } last_total = total; last_idle = idle_time; return usage; } // 获取内存使用率 double get_memory_usage() { struct sysinfo mem_info; sysinfo(&mem_info); double total = mem_info.totalram; double free = mem_info.freeram; return 100.0 * (1.0 - free / total); } // 获取GPU使用率 (NVIDIA) double get_gpu_usage() { nvmlReturn_t result; nvmlDevice_t device; unsigned int utilization; result = nvmlInit(); if (result != NVML_SUCCESS) return -1.0; result = nvmlDeviceGetHandleByIndex(0, &device); if (result != NVML_SUCCESS) { nvmlShutdown(); return -1.0; } result = nvmlDeviceGetUtilizationRates(device, &utilization); if (result != NVML_SUCCESS) { nvmlShutdown(); return -1.0; } nvmlShutdown(); return static_cast<double>(utilization.gpu); } // 资源监控线程函数 void monitor_resources() { while (!stop_monitor) { double cpu = get_cpu_usage(); double mem = get_memory_usage(); double gpu = get_gpu_usage(); { std::lock_guard<std::mutex> lock(output_mutex); std::cout << "\033[2K"; // 清除当前行 std::cout << "\r[资源监控] CPU: " << std::fixed << std::setprecision(1) << cpu << "% | " << "内存: " << mem << "% | " << "GPU: " << (gpu >= 0 ? std::to_string(static_cast<int>(gpu)) + "%" : "N/A"); std::cout.flush(); } std::this_thread::sleep_for(std::chrono::seconds(1)); } } // Chudnovsky算法计算π mpf_class chudnovsky_pi(unsigned int precision, unsigned int iterations) { mpf_set_default_prec(precision); mpf_class pi(0, precision); mpf_class sum(0, precision); mpf_class k1(13591409, precision); mpf_class k2(545140134, precision); mpf_class k3(-262537412640768000, precision); mpf_class k4(426880, precision); mpf_class k5(10005, precision); mpf_class sqrt_c(0, precision); k5 = sqrt(k5); sqrt_c = k4 * k5; mpz_class a(1); mpz_class b(1); mpz_class a_prime(1); mpz_class b_prime(1); for (unsigned int k = 0; k < iterations; k++) { mpf_class numerator(0, precision); mpf_class denominator(0, precision); if (k == 0) { a = 1; b = 1; } else { // 使用二进制分裂法优化计算 a_prime = (6*k-5)*(2*k-1)*(6*k-1); b_prime = k*k*k * k3 / 24; a *= a_prime; b *= b_prime; } numerator = k1 + k2 * k; denominator = a * b; sum += numerator / denominator; iteration_count = k + 1; // 每100次迭代显示进度 if (k % 100 == 0) { pi = sqrt_c / sum; std::lock_guard<std::mutex> lock(output_mutex); std::cout << "\n[计算进度] 迭代: " << k << "/" << iterations << " | 当前π值: " << std::setprecision(15) << pi << std::endl; } } pi = sqrt_c / sum; return pi; } int main() { const unsigned int precision = 100000; // 二进制精度位 const unsigned int iterations = 1000; // 迭代次数 std::cout << "开始计算π值 (Chudnovsky算法)..." << std::endl; std::cout << "精度: " << precision << "位 | 最大迭代: " << iterations << std::endl; // 启动资源监控线程 std::thread monitor_thread(monitor_resources); // 记录开始时间 auto start_time = std::chrono::high_resolution_clock::now(); // 计算π值 pi_value = chudnovsky_pi(precision, iterations); // 记录结束时间 auto end_time = std::chrono::high_resolution_clock::now(); auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time); // 停止监控线程 stop_monitor = true; monitor_thread.join(); // 输出最终结果 std::cout << "\n\n计算完成!" << std::endl; std::cout << "耗时: " << duration.count() / 1000.0 << " 秒" << std::endl; std::cout << "最终π值(前50位): " << std::setprecision(50) << pi_value << std::endl; return 0; } 此代码报错,修复错误 报错信息:default.cpp:6:10: fatal error: 'gmpxx.h' file not found #include <gmpxx.h> ^~~~~~~~~ 1 error generated. 输出完整代码
最新发布
07-25
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值